推荐使用java.time包中的localdate或localdatetime类进行日期加减运算,localdate适用于纯日期场景,localdatetime适用于含时间场景,二者均通过plusdays()和minusdays()方法实现,线程安全且自动处理跨月跨年。

Java 中在指定日期上增加或减去若干天,推荐使用 java.time 包中的类(Java 8+),它线程安全、设计清晰、不易出错。核心是 LocalDate(仅日期,无时分秒)或 LocalDateTime(含时间),配合 plusDays() 和 minusDays() 方法即可。
用 LocalDate 处理纯日期(推荐)
如果只需要年月日运算(比如计算“3天后是几号”),LocalDate 最合适:
- 从字符串解析:用
LocalDate.parse("2024-05-20")或指定格式器(如DateTimeFormatter.ofPattern("yyyy/MM/dd")) - 加减天数:直接调用
plusDays(5)或minusDays(3),返回新对象(不可变) - 转回字符串:用
toString()(默认 ISO 格式)或format(…)自定义输出
示例:
LocalDate date = LocalDate.parse("2024-05-20");
LocalDate after = date.plusDays(7); // 2024-05-27
LocalDate before = date.minusDays(2); // 2024-05-18
System.out.println(after.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"))); // 2024年05月27日
带时间的场景用 LocalDateTime
如果原始数据含时分秒(如 "2024-05-20 14:30:00"),用 LocalDateTime 更准确:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 解析时需匹配完整格式,例如
LocalDateTime.parse("2024-05-20T14:30:00")或自定义格式器ofPattern("yyyy-MM-dd HH:mm:ss") - 同样支持
plusDays()/minusDays(),时间部分保持不变,只调整日期字段 - 注意:它不处理时区,跨夏令时等场景需用
ZonedDateTime
兼容旧代码:Calendar(不推荐新项目使用)
若维护遗留系统且仍在用 Date 和 Calendar,可这样操作:
- 先用
Calendar.getInstance()设置原始日期 - 调用
add(Calendar.DATE, 10)(正数为加,负数为减) - 再用
getTime()转回Date
缺点明显:Calendar 非线程安全、API 笨重、易错(比如月份从 0 开始)。新项目请坚持用 java.time。
注意边界与异常
plusDays/minusDays 会自动处理月份和年份进位(如 1 月 31 日加 1 天 → 2 月 1 日),也支持大数值(如 ±10000 天)。唯一需留意的是:解析字符串时若格式不匹配,会抛 DateTimeParseException,建议包裹 try-catch。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










