Java Android:在选择了特定的月份和工作日之后,如何获取月份的所有日期?

Java Android:在选择了特定的月份和工作日之后,如何获取月份的所有日期?,java,android,date,dayofweek,Java,Android,Date,Dayofweek,我做了一个选择某个月的微调器,然后我还创建了一些选择某个日期的复选框,那么在选择了这些信息之后,如何显示所有的日期呢 例如,如果我选择一月并选择星期一和星期三,我如何分别显示星期一的所有日期:2/1、9/1/、16/1、23/1、30/1和星期三:4/1、11/1、18/1、25/1 我期待着收到你的来信!谢谢 使用此方法,您可以 private String getMondaysOfJanuary() Calendar cal = Calendar.getInstance(

我做了一个选择某个月的微调器,然后我还创建了一些选择某个日期的复选框,那么在选择了这些信息之后,如何显示所有的日期呢

例如,如果我选择一月并选择星期一和星期三,我如何分别显示星期一的所有日期:2/1、9/1/、16/1、23/1、30/1和星期三:4/1、11/1、18/1、25/1


我期待着收到你的来信!谢谢

使用此方法,您可以

private String getMondaysOfJanuary() 

        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.MONTH, Calendar.JANUARY); // month starts by 0 = january
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
        int month = cal.get(Calendar.MONTH);
        String output = "";
        while (cal.get(Calendar.MONTH) == month) {
            output += cal.get(Calendar.DAY_OF_MONTH) + "/" + (cal.get(Calendar.MONTH)+1) + ",";
            cal.add(Calendar.DAY_OF_MONTH, 7);
        }
        return output.substring(0, output.length-1);
}
用您的数据替换这两行,并将此方法参数化,您可以实现您的目标

cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
避免遗留日期时间类 旧的
日期
日历
类已被证明是令人困惑、有缺陷和麻烦的。现在是遗留的,被Java8和更高版本中的java.time类所取代。有关早期Java和Android的后台端口的链接,请参见下文

使用java.time 可以使用枚举表示一周中哪几天复选框后面的数据。该类提供了七个实例,一周中的每一天一个,周一周日

您可以在一个特殊的高度优化的
Set
对象实现中收集用户所需的天数

获取当月的第一个日期,表示为
LocalDate
。该类表示一个仅限日期的值,不包含一天中的时间和时区

LocalDate firstOfMonth = ym.atDay( 1 );
在我们的系列中循环每周的每一天。对于每个,确定该月的第一个事件。Java为第一次出现提供了方便的实现。然后一次增加一周,直到下个月我们发现自己

for ( DayOfWeek dayOfWeek : daysOfWeek ) {
    List<LocalDate> dates = new ArrayList<> ( 5 );
    LocalDate ld = firstOfMonth.with ( TemporalAdjusters.dayOfWeekInMonth ( 1 , dayOfWeek ) );
    do {
        dates.add ( ld );
        // Set up next loop.
        ld = ld.plusWeeks ( 1 );
    } while ( YearMonth.from ( ld ).equals ( ym ) );  // While in the targeted month.
    System.out.println ( "ym.toString(): " + ym + " | dayOfWeek.toString(): " + dayOfWeek + " | dates: " + dates );
}
for(DayOfWeek DayOfWeek:daysOfWeek){
列表日期=新阵列列表(5);
LocalDate ld=firstOfMonth.with(TemporalAdjusters.dayOfWeekInMonth(1,dayOfWeek));
做{
dates.add(ld);
//设置下一个循环。
ld=ld.plusWeeks(1);
}while(YearMonth.from(ld).equals(ym));//在目标月份。
System.out.println(“ym.toString():“+ym+”;dayOfWeek.toString():“+dayOfWeek+”;dates:“+dates”);
}
ym.toString():2017-01 | dayOfWeek.toString():周一|日期:[2017-01-022017-01-092017-01-162017-01-232017-01-30]

ym.toString():2017-01 | dayOfWeek.toString():周三|日期:[2017-01-042017-01-1112017-01-1822017-01-25]


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • 后来
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)

该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的课程,如、、和。

非常感谢!我只是一个初学者,所以我可能需要一些时间来理解代码。@chunyuen2请注意,
Calendar
类非常混乱,设计也很糟糕。由于许多原因,它现在被
ZonedDateTime
类和其他java.time类所取代。作为初学者,不要把
Calendar
看作是优秀的面向对象编程的一个例子;这更像是一个不该做什么的例子。@BasilBourque说真的,我对此很困惑。嘿,伙计们,我们已经使用这些课程很多年了。现在有新的,但这些仍然有效@春月2仔细阅读我的代码,我只需设置1月的第一个星期一,然后在日历实例中添加7天,直到该月changes@firegloves嗨,我的朋友,再次感谢你的回复,但是我还有一个问题,如果我选择星期一和星期三同时进行,会怎么样。。可以在同一个类中编写代码吗?如下所示:
cal.set(Calendar.DAY\u OF_WEEK,Calendar.周一+周三)非常感谢!我很感激你给了我如此详细的回答。然而,我只是一个初学者,上面的一些代码对我来说是很新的。。但我会设法弄清楚它们是什么。谢谢@春月2号你可以阅读。Java中的枚举比其他语言中的简单枚举更强大、更有用。如果您对集合不熟悉,请阅读。
Set
/
List
。@BasilBourquean我可以在编写Android应用程序时使用它吗?由于我正在学习使用Android studio编写Android应用程序,并且大部分代码都基于
java
@chunyuen2语言,请仔细阅读我的答案。注意“Android”这个项目符号。
LocalDate firstOfMonth = ym.atDay( 1 );
for ( DayOfWeek dayOfWeek : daysOfWeek ) {
    List<LocalDate> dates = new ArrayList<> ( 5 );
    LocalDate ld = firstOfMonth.with ( TemporalAdjusters.dayOfWeekInMonth ( 1 , dayOfWeek ) );
    do {
        dates.add ( ld );
        // Set up next loop.
        ld = ld.plusWeeks ( 1 );
    } while ( YearMonth.from ( ld ).equals ( ym ) );  // While in the targeted month.
    System.out.println ( "ym.toString(): " + ym + " | dayOfWeek.toString(): " + dayOfWeek + " | dates: " + dates );
}