在Java 8中,我找到的是
TemporalAdjuster temporal = dayOfWeekInMonth(1,DayOfWeek.MONDAY)
给出了一个月的第一个星期一的时间,
next(DayOfWeek.MONDAY)
在特定日期之后的下一个星期一。
但我希望在具体日期之后找到第n个星期一。
例如,我想在2017-06-06之后的第二个星期一,它应该是2017-06-19
dayOfWeekInMonth(2,DayOfWeek.MONDAY)
会给我2017-06-12和
next(DayOfWeek.MONDAY)
当然没有第n个DayOfWeek指标的参数。它将给出下一个2017-06-12的第一个星期一。
如何在不循环的情况下计算它?
答案 0 :(得分:4)
编写TemporalAdjuster
接口的实现。
查找下一个星期一,然后添加(N - 1)周:
public static TemporalAdjuster nextNthDayOfWeek(int n, DayOfWeek dayOfWeek) {
return temporal -> {
Temporal next = temporal.with(TemporalAdjusters.next(dayOfWeek));
return next.plus(n - 1, ChronoUnit.WEEKS);
};
}
将TemporalAdjuster
对象传递给LocalDate.with
。使用您想要的结果返回另一个LocalDate
。
public static void main(String[] args) {
LocalDate date = LocalDate.of(2017, 3, 7);
date = date.with(nextNthDayOfWeek(2, DayOfWeek.MONDAY));
System.out.println("date = " + date); // prints 2017-03-20
}