calendar.add() 是 java 中修改日期的核心方法,直接变更原 calendar 对象,支持按年月日时分秒增减,自动处理跨年、大小月、闰年等边界;需调用 gettime() 获取结果,现代开发推荐使用 localdate/localdatetime 的不可变 api。

Calendar.add() 是 Java 中对日期做加减运算的核心方法,它直接修改原 Calendar 对象的字段值,支持年、月、日、时、分、秒等任意时间单位的增减。
add 方法的基本用法
调用 calendar.add(field, amount),其中 field 是 Calendar 的静态常量(如 Calendar.YEAR、Calendar.MONTH),amount 是整数(正数为加,负数为减)。
- 加 2 年:
cal.add(Calendar.YEAR, 2); - 减 5 天:
cal.add(Calendar.DATE, -5); - 加 30 分钟:
cal.add(Calendar.MINUTE, 30);
注意月份从 0 开始,但 add 不受此影响
虽然 Calendar 的 MONTH 字段取值是 0–11(0 表示一月),但 add(Calendar.MONTH, n) 的行为是“逻辑月”加减:自动处理跨年、大小月、闰年等。比如 1 月 31 日加 1 个月,结果是 2 月 28 日(或 29 日),不是简单+1。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 无需手动判断 2 月天数或年末进位
- 避免用
set(Calendar.MONTH, ...)替代add,否则可能出错
add 后需调用 getTime() 获取结果
Calendar 是可变对象,add() 修改的是它自身,不返回新对象。要得到计算后的日期,必须调用 getTime()(返回 Date)或 getInstant()(Java 8+)。
- 错误写法:
Date result = cal.add(...);(编译不过) - 正确写法:
cal.add(Calendar.DAY_OF_MONTH, 7); Date nextWeek = cal.getTime();
替代方案:推荐使用 Java 8 的 LocalDate / LocalDateTime
Calendar 设计老旧、线程不安全、API 不直观。现代代码建议用 LocalDate、LocalDateTime 等不可变类:
- 加 3 天:
LocalDate.now().plusDays(3) - 减 2 个月:
LocalDateTime.now().minusMonths(2) - 链式调用、线程安全、语义清晰
如果必须兼容旧系统,Calendar.add 仍可靠;新项目优先选 java.time 包。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










