Java中System.nanoTime()方法对应的时间纪元基准是什么?
Java System.nanoTime() 返回值纪元基准说明
System.nanoTime() 没有和公共时间锚点绑定的固定纪元基准,它的返回值本质是 JVM进程启动后的纳秒级单调时间,和System.currentTimeMillis()使用的1970年1月1日UTC零点基准完全无关。
核心特性说明
- 设计目标是做高精度时间间隔测量,比如统计代码段执行耗时,而非获取当前绝对时间
- 基准值随JVM进程启动动态确定,不同进程、同一机器的不同启动实例返回的基准完全独立,不存在跨进程统一的起始点
- 你测试时拿到的
System.nanoTime()/1000000L返回值31106704,单位为毫秒,换算后约为8.6小时,刚好是你测试时当前JVM进程已经运行的时长 - 时间单调递增,不会受系统时间修改、NTP时间同步等操作的影响,这也是它比
System.currentTimeMillis()更适合做耗时统计的核心原因
你观察到的两个返回值差异完全符合预期:
System.currentTimeMillis()返回的1626111981278是1970年UTC零点到你测试时点的毫秒数,换算后对应2021年7月13日,和nanoTime()的计算逻辑完全不重合,自然存在极大差值。
注意事项
- 不要对不同JVM进程返回的
nanoTime()做差值计算,基准不一致会导致结果完全错误 - 不要将
nanoTime()的返回值转换为绝对时间使用,结果没有任何实际意义
内容的提问来源于stack exchange,提问作者ope
相关产品推荐
相关产品推荐

