使用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.Date,
Calendar,和
SimpleDateFormat。
现在处于维护模式的Joda-
Time项目建议迁移到java.time类。
要了解更多信息,请参见Oracle教程。并在Stack
Overflow中搜索许多示例和说明。规格为JSR 310。
在哪里获取java.time类?
- Java SE 8 , Java SE 9 和更高版本
- 内置的
- 标准Java API的一部分,具有捆绑的实现。
- Java 9添加了一些次要功能和修复。
- Java SE 6 和 Java SE 7
- java.time的许多功能在 ThreeTen- Backport中都被反向移植到Java 6和7 。
- 安卓系统
- 所述 ThreeTenABP 项目适应 ThreeTen-反向移植 (上述)为Android特异性。
- 请参阅 如何使用ThreeTenABP… 。
该 ThreeTen-额外
项目与其他类扩展java.time。该项目是将来可能向java.time添加内容的试验场。你可能在这里找到一些有用的类,比如
Interval,
YearWeek,
YearQuarter,和更多。



