java中localdate的minusdays、minusweeks、minusmonths、minusyears均为不可变操作,返回新对象:minusdays按日历天数计算;minusweeks等价于minusdays(weeks*7);minusmonths按日历月滚动并处理月末边界;minusyears按日历年处理闰年和月末调整。

Java 中 LocalDate 的 minusDays、minusWeeks、minusMonths、minusYears 都是不可变操作,它们不会修改原对象,而是返回一个新日期对象,表示从当前日期减去对应的时间单位。
minusDays:减去指定天数
直接传入整数天数(可为负数,负数相当于加):
-
LocalDate.now().minusDays(5)→ 当前日期往前推 5 天 -
LocalDate.of(2024, 6, 15).minusDays(10)→ 得到 2024-06-05 - 注意:不涉及月份边界问题,纯按日历天数计算
minusWeeks:减去指定周数
本质等价于 minusDays(weeks * 7),语义更清晰:
-
LocalDate.parse("2024-08-01").minusWeeks(2)→ 2024-07-18 - 适合业务中强调“几周前”这种表达,逻辑更易读
minusMonths:减去指定月数(按日历月处理)
按月份滚动,会自动处理月末日期的特殊情况:
-
LocalDate.of(2024, 3, 31).minusMonths(1)→ 2024-02-29(2月没有31日,取当月最后一天) -
LocalDate.of(2024, 1, 31).minusMonths(1)→ 2023-12-31(12月有31日,正常回退) - 不是简单减去 30 天,而是“上个月同日”,若不存在则取该月最后一天
minusYears:减去指定年数(同样按日历年处理)
类似 minusMonths,考虑闰年和月末边界:
-
LocalDate.of(2024, 2, 29).minusYears(1)→ 2023-02-28(2023 年不是闰年) -
LocalDate.of(2025, 5, 10).minusYears(3)→ 2022-05-10 - 跨闰年时会自动调整,避免抛异常
所有方法都返回新的 LocalDate,原对象保持不变。链式调用也安全,比如 date.minusMonths(1).minusDays(3)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











