最推荐使用 System.currentTimeMillis() 获取毫秒级时间戳,它高效、线程安全且无GC压力;新代码可选 Instant.now().toEpochMilli(),语义更清晰;避免使用 Date.getTime()。

Java 中获取当前时间戳的长整型数值(即毫秒级 Unix 时间戳),最常用、最推荐的方式是调用 System.currentTimeMillis(),它直接返回从 1970-01-01 00:00:00 UTC 到现在的毫秒数,类型为 long。
使用 System.currentTimeMillis()(最简单高效)
这是 JVM 提供的底层系统调用,开销极小,线程安全,适用于绝大多数场景:
- 返回值是自 Unix 纪元以来的毫秒数,类型为
long - 无需创建对象,无 GC 压力
- 适合日志打点、性能计时、缓存过期等对性能敏感的用途
long timestamp = System.currentTimeMillis(); // 如:1717023456789
使用 Instant.now().toEpochMilli()(推荐用于新代码,语义清晰)
Java 8 引入的 java.time API 更现代、不可变且线程安全。若项目已广泛使用时间 API,建议优先选此方式:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
Instant.now()获取当前时刻的不可变快照 -
.toEpochMilli()明确转为毫秒级时间戳 - 语义比
System.currentTimeMillis()更清晰,便于理解意图
long timestamp = Instant.now().toEpochMilli();
注意:不要用 Date.getTime()(不推荐)
虽然 new Date().getTime() 也能得到相同结果,但 Date 类已过时(设计缺陷多,非线程安全,易误用),官方明确建议用 java.time 替代:
-
Date是可变对象,存在安全隐患 - 构造
Date对象有额外开销(对象分配 + 初始化) - 语义模糊(
getTime()返回什么单位?需查文档;而toEpochMilli()一目了然)
如果需要秒级时间戳(不是毫秒)
只需将毫秒值除以 1000,并用 long 截断(不四舍五入):
long seconds = System.currentTimeMillis() / 1000;
或long seconds = Instant.now().getEpochSecond(); // 更直观

















