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
}