在JSR-310中查找下一个星期几的事件

给定一个JSR-310对象,比如LocalDate ,我怎样才能找到下周三(或任何其他星期几)的日期?

 LocalDate today = LocalDate.now(); LocalDate nextWed = ??? 

答案取决于你对“下周三”的定义;-)

JSR-310使用TemporalAdjusters类提供了两个选项。

第一个选项是next() :

 LocalDate input = LocalDate.now(); LocalDate nextWed = input.with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY)); 

第二个选项是nextOrSame() :

 LocalDate input = LocalDate.now(); LocalDate nextWed = input.with(TemporalAdjusters.nextOrSame(DayOfWeek.WEDNESDAY)); 

这两者根据输入日期的星期几而不同。

如果输入日期是2014-01-22(星期三),那么:

  • next()将在一周后返回2014-01-29
  • nextOrSame()将返回2014-01-22,与输入相同

如果输入日期是2014-01-20(星期一),那么:

  • next()将返回2014-01-22
  • nextOrSame()将返回2014-01-22

即。 next()始终返回更晚的日期,而nextOrSame()将返回匹配的输入日期。

请注意,使用静态导入时,两个选项看起来都要好

 LocalDate nextWed1 = input.with(next(WEDNESDAY)); LocalDate nextWed2 = input.with(nextOrSame(WEDNESDAY)); 

TemporalAdjusters还包括匹配previous()previousOrSame()方法。