Java 8 : Find nth DayOfWeek after specific day of month

标签 java datetime dayofweek localdate

在 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。

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

最佳答案

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

关于Java 8 : Find nth DayOfWeek after specific day of month,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42619409/

相关文章:

java - 使用基元的编年史 map

java - 在 Java 运行时确定 AWS lambda 名称

javascript - 如何获得星期几和一年中的月份?

PHP - 当周从星期一以外的一天开始时,获取给定周数的第一天

calendar - 如何在 nodatime 中获取基于第一周的日历?

java - log4jdbc 强制返回 ConnectionSpy 驱动程序

java - Java 和 Javascript Ed25519 实现之间的互操作性

c# - 生成日期时间(exp:09.02.2009)到字符串日期(exp:Monday)

perl - 如何在Perl中验证日期?

php - 通过 PHP 插入 MYSQL 时的 UNIX 时间戳问题