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 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
-
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 月最后一天。
立即学习“Java免费学习笔记(深入)”;
-
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无时区概念,所有计算纯基于日历系统

















