11

などの JSR-310 オブジェクトが与えられた場合LocalDate、どうすれば次の水曜日 (またはその他の曜日) の日付を見つけることができますか?

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

1 に答える 1

18

答えは、「次の水曜日」の定義によって異なります;-)

JSR-310 は、TemporalAdjustersクラスを使用して 2 つのオプションを提供します。

最初のオプションはnext()です:

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

2 番目のオプションはnextOrSame()です。

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

入力日付が何曜日かによって、両者は異なります。

入力日付が 2014-01-22 (水曜日) の場合:

  • next()1 週間後に 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()メソッドも含まれます。

于 2014-01-20T19:47:35.483 に答える