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

Jod*_*hen 11 java datetime java-8 java-time

鉴于JSR-310对象,例如LocalDate,我如何找到下周三(或任何其他星期几)的日期?

LocalDate today = LocalDate.now();
LocalDate nextWed = ???
Run Code Online (Sandbox Code Playgroud)

Jod*_*hen 17

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

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

第一个选项是next():

LocalDate input = LocalDate.now();
LocalDate nextWed = input.with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY));
Run Code Online (Sandbox Code Playgroud)

第二个选项是nextOrSame():

LocalDate input = LocalDate.now();
LocalDate nextWed = input.with(TemporalAdjusters.nextOrSame(DayOfWeek.WEDNESDAY));
Run Code Online (Sandbox Code Playgroud)

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

如果输入日期是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));
Run Code Online (Sandbox Code Playgroud)

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