plusDays和minusDays是Java 8中用于天数加减的不可变方法:plusDays(n)加n天(n为负则减),minusDays(n)减n天(n为负则加),均返回新对象,支持LocalDate、LocalDateTime、ZonedDateTime和Instant。

plusDays 和 minusDays 是 Java 8 引入的 java.time 包中 LocalDate、LocalDateTime、Instant 等不可变时间类提供的方法,用于对日期进行**天数级别的加减运算**。它们不修改原对象,而是返回一个新对象。
plusDays:给日期加上指定天数
调用 plusDays(long daysToAdd) 会在当前日期基础上增加对应天数,返回新的日期对象。
- 参数为正数:向未来推移(如
plusDays(7)表示一周后) - 参数为负数:等效于减法(如
plusDays(-3)相当于三天前) - 原对象不变,符合函数式编程的不可变设计原则
示例:
LocalDate today = LocalDate.now();LocalDate nextWeek = today.plusDays(7); // 2024-06-15(假设今天是2024-06-08)
LocalDate threeDaysAgo = today.plusDays(-3); // 2024-06-05
minusDays:从日期减去指定天数
minusDays(long daysToSubtract) 从当前日期减去指定天数,也返回新对象。
立即学习“Java免费学习笔记(深入)”;
- 参数为正数:向过去回退(如
minusDays(10)表示十天前) - 参数为负数:等效于加法(如
minusDays(-5)相当于五天后) - 和
plusDays互为反向操作:date.minusDays(n)≡date.plusDays(-n)
示例:
LocalDate today = LocalDate.of(2024, 6, 8);LocalDate tenDaysAgo = today.minusDays(10); // 2024-05-29
LocalDate fiveDaysLater = today.minusDays(-5); // 2024-06-13
支持的时间类型不止 LocalDate
这两个方法不仅适用于 LocalDate,还适用于:
-
LocalDateTime:同时处理日期和时间(时分秒不变,只调整天数) -
ZonedDateTime:考虑时区规则(如夏令时切换可能影响具体时刻) -
Instant:基于 UTC 时间戳计算(以 86400 秒为一天,不涉及日历系统)
注意:Instant.plusDays(1) 总是加 24 小时(86400 秒),而 LocalDate.plusDays(1) 是日历意义上的“下一天”,两者在跨夏令时等场景下结果可能不同。
常见注意事项
- 传入
Long.MIN_VALUE或Long.MAX_VALUE可能导致溢出,抛出DateTimeException - 不支持小数天数——如需加半天,改用
plusHours(12)或plusMinutes(720) - 若需按月/年加减,应使用
plusMonths()、plusYears(),避免因月份天数不一致导致歧义


















