繁体   English   中英

在 JAVA 中获取给定日期范围(DateX 和 DateY)之间的所有星期一和星期四日期将是一个很好的实现

[英]What would be a good implementation to get all Monday and Thursday dates Between a given date range (DateX and DateY) in JAVA

我想在给定的日期范围内间隔几天。 什么是最佳解决方案? 例如,我想获取从今天到两个月内所有星期一、星期三和星期四的日期。

使用 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-06, 2017-11-13, 2017-11-20, 2017-11-27, 2017-12-04, 2017-12-11 ]

星期三: [2017-10-18, 2017-10-25, 2017-11-01, 2017-11-08, 2017-11-15, 2017-11-22, 2017-11-29, 2017-12-06 , 2017-12-13]

星期四: [2017-10-19, 2017-10-26, 2017-11-02, 2017-11-09, 2017-11-16, 2017-11-23, 2017-11-30, 2017-12-07 , 2017-12-14]


关于java.time

java.time框架内置于 Java 8 及更高版本中。 这些类取代了麻烦的旧的遗留日期时间类,例如java.util.DateCalendarSimpleDateFormat

现在处于维护模式Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参阅Oracle 教程 并在 Stack Overflow 中搜索许多示例和解释。 规范是JSR 310

在哪里获取 java.time 类?

ThreeTen-Extra项目用附加类扩展了 java.time。 这个项目是未来可能添加到 java.time 的试验场。 您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuarter等等

计算 x 和 y 之间的周数,并考虑 x 的工作日。

看看java.util.Calendar 可以获取它的一个实例,将其设置为给定日期,然后,例如,对其调用get(DAY_OF_WEEK) 它还有一些很好的方法来获取给定年份的天数和给定年份的天数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM