推荐使用java.time包操作日期:加天数用plusdays(),加月数用plusmonths()(自动处理月末),支持链式调用;按需选用localdate、localdatetime或zoneddatetime。

Java 中给日期加月数或天数,推荐使用 java.time 包(Java 8+),它比老的 Date 和 Calendar 更简洁、线程安全、不易出错。
加天数:用 plusDays()
对 LocalDate、LocalDateTime 或 ZonedDateTime 调用 plusDays() 即可。注意:这些类型是不可变的,操作后返回新对象,原对象不变。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
LocalDate today = LocalDate.now(); LocalDate after5Days = today.plusDays(5); // 加 5 天 LocalDateTime now = LocalDateTime.now(); LocalDateTime later = now.plusDays(3); // 加 3 天(时分秒保留)
加月数:用 plusMonths()
plusMonths() 会智能处理月末日期,比如 1 月 31 日加 1 个月 → 2 月 28 日(闰年为 29 日),无需手动判断。
LocalDate jan31 = LocalDate.of(2024, 1, 31); LocalDate feb29 = jan31.plusMonths(1); // 2024-02-29(闰年) LocalDate jan31_2023 = LocalDate.of(2023, 1, 31); LocalDate feb28 = jan31_2023.plusMonths(1); // 2023-02-28
同时加月和天:链式调用
可以连续调用多个 plusXxx() 方法,顺序无关(但语义建议先月后天):
LocalDate base = LocalDate.of(2024, 1, 15); LocalDate result = base.plusMonths(2).plusDays(10); // 2024-03-25
注意时区与时间类型的选择
- 只关心日期(如生日、合同截止日)→ 用
LocalDate - 需要精确到时刻(含时分秒)且不涉及时区 → 用
LocalDateTime - 需保留时区信息(如服务器日志、跨时区调度)→ 用
ZonedDateTime,它的plusMonths()和plusDays()也会自动处理夏令时等偏移变化 - 避免混用旧 API(
java.util.Date/Calendar),如必须转换,可用toInstant().atZone(ZoneId.systemDefault())等桥接方法
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










