TemporalAdjusters提供内置方法简化日期调整:next(DayOfWeek.MONDAY)返回严格下一个周一(不含当天),lastDayOfMonth()返回当月最后一天并自动适配大小月和闰年,其他如nextOrSame、firstDayOfNextMonth等也支持灵活组合使用。

Java 中 TemporalAdjusters 是处理日期调整的利器,获取“下周一”或“月末”这类常见需求,只需调用内置静态方法即可,无需手动计算。
获取下周一(含本周一已过的情况)
使用 TemporalAdjusters.next(DayOfWeek.MONDAY),它会返回**严格意义上的下一个周一**(即从当前日期起,往后找第一个周一,不包含当天)。
- 如果今天是周一(比如 2024-06-10),结果是下周的周一(2024-06-17)
- 如果今天是周二(2024-06-11),结果也是 2024-06-17
- 注意:没有“下周一(含今天)”的内置方法;若需“本周一或下周一”,应先判断再调整,例如:
LocalDate today = LocalDate.now();
LocalDate monday = today.with(DayOfWeek.MONDAY);
LocalDate nextOrThisMonday = monday.isBefore(today) ? monday.plusWeeks(1) : monday;
获取本月最后一天(月末)
直接使用 TemporalAdjusters.lastDayOfMonth(),简洁可靠:
- 对任意日期调用,都返回当月的最后一天,如
LocalDate.of(2024, 6, 15).with(TemporalAdjusters.lastDayOfMonth())→2024-06-30 - 自动适配大小月和闰年二月(如 2024-02-10 → 2024-02-29)
其他实用同类方法
这些也来自 TemporalAdjusters,可按需组合使用:
立即学习“Java免费学习笔记(深入)”;
-
nextOrSame(DayOfWeek.MONDAY):返回本周一(如果今天是周一)或下周一 -
firstDayOfNextMonth():下月第一天(常用于计算“下月1号”) -
lastInMonth(DayOfWeek.FRIDAY):本月最后一个周五 -
dayOfWeekInMonth(2, DayOfWeek.WEDNESDAY):本月第二个周三
所有调整器都作用于 LocalDate、LocalDateTime 等实现了 Temporal 的类型,线程安全、不可变,推荐优先使用。


















