System.nanoTime() 的 Java 时代?

问题描述

我想知道 System.nanoTime() 的时代是基于什么的。 显然它不是基于 1970 年,因为 (System.nanoTime()/1000000L)(返回 31106704)no where near 等于 System.currentTimeMillis()(返回 1626111981278)。

解决方法

嗯,nanoTime() 的文档相当清楚:

此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。返回的值表示自某个固定但任意的原始时间以来的纳秒(可能在未来,因此值可能为负)。在 Java 虚拟机的实例中,此方法的所有调用都使用相同的来源...

所以:

  • 时代是特定于实现的,正是方法实现的作者认为会起作用的;
  • 时代在整个JVM实例中是固定的;
  • 可能其中一个或两个值为负,但在这种情况下计算仍然正确。

那么,你应该关心时代吗?不。绝对不是。您对 的实施感到好奇吗?你不能,因为没有“the”实现。