【问题标题】:Java 8: Find nth DayOfWeek after specific day of monthJava 8:在一个月的特定日期之后查找第 n 个 DayOfWeek
【发布时间】:2017-07-25 22:56:34
【问题描述】:

在 Java 8 中,我发现的是

TemporalAdjuster temporal = dayOfWeekInMonth(1,DayOfWeek.MONDAY) 

给出一个月的第一个星期一的时间,并且

next(DayOfWeek.MONDAY)

给出特定日期之后的下周一。

但我想找到特定日期之后的第 n 个星期一。

例如,我想要 2017-06-06 之后的第 2 个星期一,它应该是 2017-06-19

dayOfWeekInMonth(2,DayOfWeek.MONDAY)

会给我 2017-06-12 和

next(DayOfWeek.MONDAY) 

当然没有用于第 n 个 DayOfWeek 指标的参数。它将给出下一个第一个星期一,即 2017-06-12。

如何在不循环的情况下计算它?

【问题讨论】:

标签: java datetime dayofweek localdate


【解决方案1】:

编写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
} 

【讨论】:

  • 非常感谢您提供这么好的解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多