Java中LocalDate的plusDays、plusWeeks、plusMonths、plusYears均为不可变操作,返回新对象;plusDays/plusWeeks按天数计算,plusMonths/plusYears按日历单位智能处理月末和闰年边界。

Java 中 LocalDate 的 plusDays、plusWeeks、plusMonths、plusYears 都是不可变操作,返回新对象,原对象不变 —— 这是关键前提,用错就容易“没变”。
plusDays 和 plusWeeks:按天/周直接加,简单可靠
这两个方法本质都是加天数:plusWeeks(n) 等价于 plusDays(n * 7),不涉及月份长度或闰年逻辑,计算直观。
LocalDate today = LocalDate.now();LocalDate tomorrow = today.plusDays(1); // 明天LocalDate nextWeek = today.plusWeeks(2); // 两周后- 支持负数:
today.plusDays(-3)表示三天前
plusMonths:按日历月推进,自动处理月末边界
不是加固定天数(比如 30 天),而是“向前推 n 个日历月”,并智能处理月末日期溢出问题。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
-
LocalDate.of(2024, 1, 31).plusMonths(1)→ 2024-02-29(不是 2024-02-31,因为 2 月没有 31 日,自动取当月最后一天) -
LocalDate.of(2024, 3, 31).plusMonths(1)→ 2024-04-30(4 月只有 30 天) - 跨年也正常:
LocalDate.of(2023, 12, 15).plusMonths(3)→ 2024-03-15
plusYears:按年份推进,同样处理闰年 2 月 29 日
类似 plusMonths,是日历年份偏移,会保留原始日期的“日”部分;若目标年份不存在该日(如 2 月 29 日在平年),则取当年 2 月最后一天。
-
LocalDate.of(2024, 2, 29).plusYears(1)→ 2025-02-28(2025 年不是闰年) -
LocalDate.of(2023, 1, 10).plusYears(2)→ 2025-01-10 - 可链式调用:
date.plusYears(1).plusMonths(6).plusDays(5)
注意事项和常见误区
这些方法都返回新 LocalDate,原变量不会被修改。别忘了重新赋值或用于下一步。
- ❌ 错误写法:
date.plusDays(10); // date 没变! - ✅ 正确写法:
date = date.plusDays(10);或LocalDate later = date.plusDays(10); - 如果需要加多个单位,推荐链式调用,语义清晰;避免手动换算(比如把 1 年 2 个月转成天数),易出错且不考虑闰年/大小月
- 注意时区无关性:
LocalDate无时区概念,所有计算纯基于日历系统
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










