这将是一个很好的实现来获得JAVA指定日期范围内与所有星期一和星期四日期(德恩和DateY)(Wha

2019-06-26 02:27发布

我有这个问题。 我想给定的日期范围之间的一些天。 什么是这个最佳的解决方案? 例如我想所有的周一,周三和周四日期从今天长达两个月。

先感谢您

Answer 1:

看一看java.util.Calendar 。 我们可以得到它的一个实例,将其设置为一个给定的日期,然后,例如,调用get(DAY_OF_WEEK)就可以了。 此外,它有一些很好的方法来获取天数在一年中和天数在某一年。



Answer 2:

使用java.time

现代的方法使用java.time类。

实例化List对象,收集你的结果。

List<LocalDate> mondays = new ArrayList<>() ;
List<LocalDate> wednesdays = new ArrayList<>() ;
List<LocalDate> thursdays = new ArrayList<>() ;

确定今天的日期。 这需要一个时间段,随着日期世界各地通过区域对于任何给定的时刻发生变化。

LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) ) ;

添加两个多月。 该java.time类巧妙处理的短/长个月的问题。 阅读类文档,看看是否有自己的行为/政策达成协议。

LocalDate twoMonthsLater = today.plusMonths( 2 );

循环每个日期,每次递增一天。 使用测试其日常的周值DayOfWeek枚举。 请注意,您可switch的上Enum对象,但奇怪的不能包含它的类名前缀。 因此,我们使用MONDAY ,而不是我的首选DayOfWeek.MONDAY

LocalDate localDate = today ;
while ( localDate.isBefore( twoMonthsLater ) ) {
    DayOfWeek dow = localDate.getDayOfWeek() ;
     switch ( dow ) {
            case MONDAY: 
                mondays.add( localDate ) ;
                break;

            case WEDNESDAY: 
                wednesdays.add( localDate ) ;
                break;

            case THURSDAY:
                thursdays.add( localDate ) ;
                break;

            default: 
                // Ignore any other day-of-week.
                break;
        }
        // Set-up the next loop. Increment by one day at a time.
        localDate = localDate.plusDays( 1 ) ;
}

转储到控制台。

System.out.println( "From " + today + " to " + twoMonthsLater + ":"  );
System.out.println( "mondays: " + mondays ) ;
System.out.println( "wednesdays: " + wednesdays ) ;
System.out.println( "thursdays: " + thursdays ) ;

请参阅该代码在现场运行IdeOne.com 。

从2017年10月17日至2017年12月17日:

星期一:[2017年10月23日,2017年10月30日,2017年11月6日,2017年11月13日,二零一七年十一月二十日,2017年11月27日,2017年12月4日,2017年12月11日]

星期三:[2017年10月18日,2017年10月25日,2017年11月1日,2017年11月8日,2017年11月15日,2017年11月22日,2017年11月29日,2017年12月6日,2017年12月13日]

星期四:[2017年10月19日,2017年10月26日,2017年11月2日,2017年11月9日,2017年11月16日,2017年11月23日,2017年11月30日,2017年12月7日,二〇一七年十二月十四日]


关于java.time

该java.time框架是建立在Java 8和更高版本。 这些类取代麻烦的老传统日期时间类,如java.util.DateCalendar ,和SimpleDateFormat

该乔达-时间的项目,现在在维护模式 ,建议迁移到java.time类。

要了解更多信息,请参阅甲骨文教程 。 和搜索堆栈溢出了很多例子和解释。 规范是JSR 310 。

从哪里获取java.time类?

  • 的Java SE 8Java SE的9 ,后来
    • 内置。
    • 具有捆绑实现标准Java API的一部分。
    • Java的9增加了一些小的功能和修复。
  • Java SE 6中Java SE 7中
    • 多的java.time功能后移植到Java 6和7在ThreeTen-反向移植
  • Android的
    • 所述ThreeTenABP项目适应于Android ThreeTen-反向移植 (上面提到的)特异性。
    • 请参阅如何使用ThreeTenABP ...

ThreeTen-额外项目与其他类扩展java.time。 该项目是为将来可能增加的java.time试验场。 您可以在这里找到一些有用的类,比如IntervalYearWeekYearQuarter ,和更多 。



Answer 3:

计算x与y之间的周数,并采取X的平日考虑。



文章来源: What would be a good implementation to get all Monday and Thursday dates Between a given date range (DateX and DateY) in JAVA
标签: java date range