2017-10-12 34 views
-4

我在Linux上System.nanoTime和System.currentTimeMillis的()

  1. 使用JDK8在Windows和JDK8当我运行System.nanoTime()/System.currentTimeMillis()在Windows上,其结果是49
System.nanoTime(): 74786833960332 

System.currentTimeMillis():1507786236263 
  1. 在Linux上运行时,结果为26236
System.nanoTime(): 39560110918205325 

System.currentTimeMillis():1507786262105 

我很困惑,结果,这两个值是不同的那么多。

另外,我认为nanoTime是1,000,000倍毫秒,从而使上述两个两个值看我错了(也就是说,他们都应该是大约1000000)

+3

为什么不尝试输出每个值与您的计算一起单独输出并查看您得到的结果..在此处发布结果以获得更多帮助 – ShoeLace

+0

您看到,当人们回答这个问题时,输出值没有任何帮助 – Tom

回答

3

Java System documentation

[System.nanoTime]返回正在运行的Java虚拟机的高分辨率时间源的当前值,在纳秒。

这意味着System.nanoTime()返回JVM在毫微秒的流逝运行时间,而System.currentTimeMillis()返回以毫秒为单位的时间从午夜开始,1970年1月1日UTC。

这导致非一致nanoTime在每次运行。

+0

谢谢@ gery1000,完美的答案。 – Tom

4

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

5

苹果和桔子

System.nanotime无关与当前日期和时间的一天。其目的是计算已用时间时间。

你的数学和你比较System.currentTimeMillis()没有任何意义可言。这两个功能是无与伦比的。

张贴堆栈溢出之前,请先阅读文档。

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

  • 如果您想要UTC的当前时刻,请致电Instant.now()
  • 如果你想在一个时区的当前时刻,调用ZonedDateTime.now

在Java 9和更高版本中,这两个类都使用新的实现Clock以高达纳秒的分辨率捕获当前时刻。但请记住,主流电脑缺乏具有如此高灵敏度的硬件时钟。微秒可能是您在2017年将会在真实世界中看到的最好的分辨率。

+0

你似乎对这个问题感到恼火。如果是这样,你不应该打扰自己回答.. –

+0

@EugeneAlexeev我一点也不恼火。尽我所能帮助我。我相信你在阅读我的答案时太多了。如果有粗俗/冒犯的具体措辞,请指出。 –

相关问题