Java 8: 查找某月特定日期后的第 n 个 DayOfWeek
Java 8: Find nth DayOfWeek after specific day of month
在Java8中,我查到的是
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.
如何在不循环的情况下计算它?
编写 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
}
在Java8中,我查到的是
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.
如何在不循环的情况下计算它?
编写 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
}