11

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

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

1 回答 1

18

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

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

IE。next()总是返回较晚的日期,而nextOrSame()如果匹配则返回输入日期。

请注意,使用静态导入,这两个选项看起来要好得多:

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

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

于 2014-01-20T19:47:35.483 回答