Calendar.getTime() 直接返回 java.util.Date 实例,无需转换;它将 Calendar 当前时间封装为 Date,注意月份从 0 开始,Java 8+ 推荐使用 Instant 或 LocalDateTime 替代。

实际上,Calendar.getTime() 方法的设计初衷就是直接返回 Date 对象,一步到位,完全不需要额外转换。很多开发者一开始会误以为需要手动构造,其实只需调用一次就能获取到所需的时间。
Calendar.getTime() 的作用
该方法将当前 Calendar 对象中存储的年、月、日、时、分、秒等时间信息,直接封装成一个 Date 实例。只要 Calendar 已经正确设置好时间,调用它就能得到对应的 Date,非常简洁高效。
- 返回值类型就是
java.util.Date,不需要强制类型转换,更不用写(Date) calendar.getTime()这种多余操作 - 注意:
Calendar是可变对象,修改它的字段会影响后续getTime()的结果,因此若要保留某个时间点,最好先取出来 - 示例:
Date date = calendar.getTime();一行代码即可完成
常见使用场景
比如从当前时间创建 Date:
Calendar cal = Calendar.getInstance();Date now = cal.getTime(); // 直接获取当前时间的 Date
或者设置特定时间后再获取:
cal.set(2025, Calendar.MARCH, 15, 10, 30, 0);Date target = cal.getTime(); // 得到 2025年3月15日 10:30:00 的 Date
注意事项
虽然用法简单,但容易踩坑的地方需要留意:
Calendar的月份从 0 开始(Calendar.JANUARY = 0),千万别写成 1,否则会错位一个月- 确保已经调用过
set(...)或正确初始化,否则可能拿到默认的当前时间甚至旧时间,导致逻辑错误 - Java 8+ 推荐用
LocalDateTime/ZonedDateTime替代Calendar和Date,新 API 更清晰、更安全
替代方案(现代写法)
如果项目已经升级到 Java 8 或更高版本,建议直接用新时间 API:
Instant instant = calendar.toInstant();然后Date date = Date.from(instant);虽然最后还是转成Date,但路径更明确- 或者彻底抛弃
Calendar,直接用LocalDateTime.of(2025, 3, 15, 10, 30)来构建时间,避免月份偏移的陷阱,代码也更简洁
