temporaladjusters.firstdayofnextmonth()可直接获取下个月第一天,适用于localdate等temporal接口实现类,自动处理跨年和月末日期异常,语义清晰且安全。

直接用 TemporalAdjusters.firstDayOfNextMonth() 就能获取下个月的第一天,它返回一个调整器,配合 LocalDate 或其他支持时间调整的类使用。
基本用法:LocalDate + firstDayOfNextMonth
这是最常用的方式。先有一个基准日期(比如今天),再用调整器算出下个月第一天:
- LocalDate today = LocalDate.now();
- LocalDate firstOfNextMonth = today.with(TemporalAdjusters.firstDayOfNextMonth());
例如今天是 2024-05-15,结果就是 2024-06-01;如果是 2024-01-31,结果仍是 2024-02-01 —— 不会因月末日期而异常。
不依赖当前日期:从指定日期出发
你可以任意传入一个 LocalDate,不限于 today:
- LocalDate someDay = LocalDate.of(2023, 12, 20);
- LocalDate result = someDay.with(TemporalAdjusters.firstDayOfNextMonth()); // 得到 2024-01-01
注意点:只适用于支持该调整器的类型
这个调整器主要设计用于 LocalDate、LocalDateTime、YearMonth 等实现了 Temporal 接口的类:
- ✅ 可以用在
LocalDate和LocalDateTime上 - ❌ 不能直接用在
Instant或带时区的ZonedDateTime上(需先转成不含时区的本地时间再调整)
替代写法(手动计算,便于理解逻辑)
等价逻辑是:当前月加 1,日设为 1:
- // 效果相同,但不如 adjuster 简洁清晰
- LocalDate nextMonth = today.plusMonths(1).withDayOfMonth(1);
不过推荐优先用 firstDayOfNextMonth(),语义明确、不易出错,还自动处理了跨年(如 12 月 → 下年 1 月)和不同月份天数差异的问题。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











