Java中Calendar如何转为Date对象

作者:技术拾光

时间:2026-07-21

浏览:620

Calendar.getTime()直接返回java.util.Date实例,无需转换。注意月份从0开始,0代表1月,易混淆。Java8及以上推荐使用Instant或LocalDateTime,新API更清晰安全。Calendar可变,其getTime()返回的Date会随Calendar修改而改变,不是快照。并且Date类大部分方法已过时,线程不安全,建议

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

Java中Calendar如何转为Date对象

其实,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) 来构建时间,避免月份偏移的陷阱,代码也更简洁

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章