The answer depends on your definition of "next Wednesday" ;-)
JSR-310 provides two options using the TemporalAdjusters class.
The first option is next():
LocalDate input = LocalDate.now();
LocalDate nextWed = input.with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY));
The second option is nextOrSame():
LocalDate input = LocalDate.now();
LocalDate nextWed = input.with(TemporalAdjusters.nextOrSame(DayOfWeek.WEDNESDAY));
The two differ depending on what day-of-week the input date is.
If the input date is 2014-01-22 (a Wednesday) then:
next()
will return 2014-01-29, one week later
nextOrSame()
will return 2014-01-22, the same as the input
If the input date is 2014-01-20 (a Monday) then:
next()
will return 2014-01-22
nextOrSame()
will return 2014-01-22
ie. next()
always returns a later date, whereas nextOrSame()
will return the input date if it matches.
Note that both options look much better with static imports:
LocalDate nextWed1 = input.with(next(WEDNESDAY));
LocalDate nextWed2 = input.with(nextOrSame(WEDNESDAY));
TemporalAdjusters
also includes matching previous()
and previousOrSame()
methods.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…