我并不完全清楚您通常想要什么结果,以及为什么。如果我可以假设您想要下一个日期是某个月的第n天,那么它比您的代码要复杂一些。编辑: NorthernSky在他/她的回答下的评论中是正确的,它.with(TemporalAdjusters.dayOfWeekInMonth(1, DayOfWeek.MONDAY))
更直接、更简短地为我们提供了我们需要的东西。这应该有效:
ZoneId zone = ZoneId.of("Africa/Bamako");
LocalDate today = LocalDate.now(zone);
LocalDate nextBookingDate = today.with(Month.JANUARY)
.with(TemporalAdjusters.dayOfWeekInMonth(1, DayOfWeek.MONDAY));
if (nextBookingDate.isBefore(today)) {
// Take next year instead
nextBookingDate = today.plusYears(1)
.with(Month.JANUARY)
.with(TemporalAdjusters.dayOfWeekInMonth(1, DayOfWeek.MONDAY));
}
System.out.println("Next booking date: " + nextBookingDate);
我刚才运行代码时的输出是:
下次预订日期:2020-01-06
TemporalAdjusters.dayOfWeekInMonth()
将为我们提供该月的第一个星期一、第三个星期二等。因此,将一周中的任何一天和最多 4 或 5 的任何数字输入此方法。
请提供我放置非洲/巴马科的所需时区,因为它在所有时区都不是相同的日期。
链接: 的文档TemporalAdjusters.dayOfWeekInMonth()
。