使用时间API获取下个月的特定日期

时间:2018-07-27 03:29:59

标签: java date java-time localdate java-date

我需要使用java.time API查找下个月的第二个星期日的日期。我是时间API的新手。我尝试了这段代码:

LocalDate current=LocalDate.now();

这是给我当前日期,但是LocalDate没有任何这样的方法可以获取nextMonth或类似的信息。请提出建议。我只需要使用时间API。

2 个答案:

答案 0 :(得分:3)

可以使用TemporalAdjuster来完成此操作,

LocalDateTime now = LocalDateTime.now();
System.out.println("First day of next month: " + now.with(TemporalAdjusters.firstDayOfNextMonth()));
System.out.println("First Friday in month: " + now.with(TemporalAdjusters.firstInMonth(DayOfWeek.FRIDAY)));

// Custom temporal adjusters.
TemporalAdjuster secondSundayOfNextMonth = temporal -> {
    LocalDate date = LocalDate.from(temporal).plusMonths(1);
    date = date.with(TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.SUNDAY));
    return temporal.with(date);
};
System.out.println("Second sunday of next month: " + now.with(secondSundayOfNextMonth));

答案 1 :(得分:1)

alexander.egger’s answer是正确的,向我们展示了我们需要的构建基块(+1)。对于上述问题,我们唯一需要的TemporalAdjuster是从库中获得的问题。以下内容可能会更简单:

    LocalDate current = LocalDate.now(ZoneId.of("Pacific/Easter"));
    LocalDate secondSundayOfNextMonth = current.plusMonths(1)
            .with(TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.SUNDAY));
    System.out.println("2nd Sunday of next month is " + secondSundayOfNextMonth);

今天运行的输出是:

  

下个月的第二个星期日是2018-08-12

由于月份不是在不同的时区同时开始的,所以我更愿意为LocalDate.now指定明确的时区。

“Everything Should Be Made as Simple as Possible, But Not Simpler”(我想我是从Bjarne Stroustrup那里读的,但他可能在其他地方偷了它)。