你提到的 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);


四、注意事项

  1. 系统时间可被修改
  • System.currentTimeMillis() 依赖操作系统时间,如果系统时间被修改,返回值会变化
  • 对于精确测量时间间隔,建议使用:
long nanoStart = System.nanoTime();

  1. 与时区无关
  • 返回的是 UTC 时间的毫秒数
  • 转换为本地时间需要 Date / Calendar / LocalDateTime

五、对比 System.nanoTime()

方法单位用途时区影响
currentTimeMillis()毫秒获取当前时间UTC
nanoTime()纳秒精确测量耗时无(相对时间)

六、一句话总结

System.currentTimeMillis() = 获取自 1970-01-01 00:00:00 UTC 到当前时间的毫秒数,常用于时间戳、计算耗时和日期转换。