System.nanoTime和System.currentTimeMillis()

Tom*_*Tom -4 java

我在Windows上使用JDK8,在Linux上使用JDK8

  1. 当我System.nanoTime()/System.currentTimeMillis()在Windows上运行时,结果是49,
System.nanoTime(): 74786833960332

System.currentTimeMillis():1507786236263
Run Code Online (Sandbox Code Playgroud)
  1. 在Linux上运行时,结果是 26236
System.nanoTime(): 39560110918205325

System.currentTimeMillis():1507786262105
Run Code Online (Sandbox Code Playgroud)

我对结果很困惑,这两个值差别很大.

另外,我认为nanoTime是1,000,000毫秒,所以上面的两个值对我来说都是错误的(也就是说,它们都应该是大约1000000)

Evg*_*eev 5

根据System.nanotime()文档,它不是system time以纳秒为单位,也与System.currenTimeMillis. 它是平台相关的(这就是差异的原因)纳秒生成器,它用于测量两次调用之间经过的时间。


Bas*_*que 5

苹果和橘子

System.nanotime与当前日期和时间无关.其目的是计算经过的时间.

你的数学和你的比较System.currentTimeMillis()毫无意义.这两个功能是无与伦比的.

在发布到Stack Overflow之前阅读文档.

对于日期时间处理,您根本不应该使用System该类.而是使用Java 8及更高版本中内置的业界领先的java.time类.

  • 如果您想要UTC当前时刻,请致电Instant.now().
  • 如果您想要时区中的当前时刻,请致电ZonedDateTime.now.

在Java 9及更高版本中,两个类都使用新的实现Clock来捕获分辨率中的当前时刻,最长可达纳秒.但请记住,主流计算机缺少具有如此高灵敏度的硬件时钟.微秒可能是2017年你在现实世界中看到的最好的分辨率.