Date是Java中表示毫秒级时间戳的基础类,位于java.util包,以1970年1月1日UTC为纪元;支持new Date()和new Date(long)创建,getTime()/setTime()实现与毫秒互转,需配合SimpleDateFormat格式化/解析(注意线程不安全);虽已过时,但在遗留系统、JDBC交互等场景仍需使用。

Date 类是 Java 中表示特定时间点的基础类,位于 java.util 包中,精确到毫秒。它本质上是一个“时间戳”——记录从 1970 年 1 月 1 日 00:00:00 UTC(称为“纪元时间”)开始经过的毫秒数。
Date 的基本创建方式
最常用的两种构造方法:
-
new Date():直接创建一个代表当前系统时间的 Date 对象; -
new Date(long millis):用指定毫秒数构造,例如new Date(1640995200000L)表示 2022 年 1 月 1 日 00:00:00 GMT。
注意:Date 默认 toString() 输出格式(如 Wed Dec 24 00:03:00 CST 2025)是本地化、不可控的,仅适合调试,不能用于展示或传输。
Date 与毫秒值的相互转换
Date 的核心价值在于其与毫秒值的双向可操作性:
立即学习“Java免费学习笔记(深入)”;
-
date.getTime():获取该时间点对应的毫秒数(long 类型),可用于计算时间差、持久化存储或跨系统传递; -
date.setTime(long millis):用毫秒数重设 Date 对象的时间值。
比如计算两个时间点间隔多少天,可先转为毫秒相减,再除以 1000 * 60 * 60 * 24 即可。
Date 与字符串的格式化和解析
Date 本身不支持自定义格式,必须借助 SimpleDateFormat(位于 java.text 包):
-
格式化(Date → String):调用
simpleDateFormat.format(date),例如模式"yyyy-MM-dd HH:mm:ss"输出"2025-12-24 00:03:00"; -
解析(String → Date):调用
simpleDateFormat.parse("2025-12-24"),需确保字符串格式与模式严格匹配,否则抛出ParseException。
⚠️ 注意:SimpleDateFormat 不是线程安全的,多线程环境下应避免复用同一实例,推荐每次使用时新建或使用 ThreadLocal 封装。
重要提醒:Date 类已过时,但仍有实用场景
Java 8 引入了 java.time 新 API(如 LocalDateTime、ZonedDateTime),设计更合理、线程安全、语义清晰,新项目应优先使用新 API。
不过 Date 仍在以下场景常见:
- 老系统维护或遗留接口(如某些框架、数据库驱动仍以 Date 为参数/返回值);
- 快速获取当前时间戳(
new Date().getTime()简洁有效); - 与
java.sql.Date、Timestamp等 JDBC 类交互时需转换。
实际开发中,可按需桥接:用 Date.from(Instant) 或 date.toInstant() 在新旧类型间转换。










