我需要使用java.time API查找下个月的第二个星期日的日期。我是时间API的新手。我尝试了这段代码:
LocalDate current=LocalDate.now();
这是给我当前日期,但是LocalDate
没有任何这样的方法可以获取nextMonth或类似的信息。请提出建议。我只需要使用时间API。
答案 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那里读的,但他可能在其他地方偷了它)。