你提到的 System.currentTimeMillis() 是 Java 中的一个系统方法,用于获取 当前时间的毫秒数(自 1970 年 1 月 1 日 00:00:00 UTC 起的毫秒数)。我给你详细解析一下,包括用法、示例和注意事项。
一、语法
long currentTimeMillis = System.currentTimeMillis();
- 返回值类型:
long - 单位:毫秒(ms)
- 基准时间:Unix 纪元(1970-01-01 00:00:00 UTC)
二、示例代码
public class CurrentTimeExample {
public static void main(String[] args) {
long millis = System.currentTimeMillis();
System.out.println("当前时间毫秒数:" + millis);
// 转为秒
long seconds = millis / 1000;
System.out.println("当前时间秒数:" + seconds);
// 转为 Date 对象
java.util.Date date = new java.util.Date(millis);
System.out.println("当前时间日期对象:" + date);
}
}
示例输出:
当前时间毫秒数:1735689600000
当前时间秒数:1735689600
当前时间日期对象:Tue Dec 31 15:00:00 CST 2025
三、常见用途
1️⃣ 计算时间差 / 执行耗时:
long start = System.currentTimeMillis();
// 执行某段耗时代码
long end = System.currentTimeMillis();
System.out.println("耗时:" + (end - start) + " 毫秒");
2️⃣ 生成时间戳(Timestamp):
String timestamp = String.valueOf(System.currentTimeMillis());
System.out.println(timestamp); // 可用于唯一 ID
3️⃣ 与 Date / Calendar / Instant 互转:
// Java 8
java.time.Instant instant = java.time.Instant.ofEpochMilli(System.currentTimeMillis());
System.out.println(instant);
四、注意事项
- 系统时间可被修改
System.currentTimeMillis()依赖操作系统时间,如果系统时间被修改,返回值会变化- 对于精确测量时间间隔,建议使用:
long nanoStart = System.nanoTime();
- 与时区无关
- 返回的是 UTC 时间的毫秒数
- 转换为本地时间需要 Date / Calendar / LocalDateTime
五、对比 System.nanoTime()
| 方法 | 单位 | 用途 | 时区影响 |
|---|---|---|---|
currentTimeMillis() | 毫秒 | 获取当前时间 | UTC |
nanoTime() | 纳秒 | 精确测量耗时 | 无(相对时间) |
六、一句话总结
System.currentTimeMillis()= 获取自 1970-01-01 00:00:00 UTC 到当前时间的毫秒数,常用于时间戳、计算耗时和日期转换。
发表回复