我在Windows上使用JDK8,在Linux上使用JDK8
System.nanoTime()/System.currentTimeMillis()
时,结果为49
,System.nanoTime(): 74786833960332 System.currentTimeMillis():1507786236263
26236
System.nanoTime(): 39560110918205325 System.currentTimeMillis():1507786262105
我对结果感到困惑,这两个值差异很大。
另外,我认为nanoTime是1,000,000
倍毫秒,所以上面的两个值对我来说都是错误的(也就是说,它们都应该是大约1000000)
答案 0 :(得分:5)
System.nanotime
与当前日期和时间无关。其目的是计算已过去的时间。
您的数学和与System.currentTimeMillis()
的比较完全没有意义。这两个功能是无与伦比的。
在发布到Stack Overflow之前阅读文档。
对于日期时间处理,您根本不应该使用System
类。而是使用Java 8及更高版本中内置的业界领先的java.time类。
Instant.now()
。 ZonedDateTime.now
。 在Java 9及更高版本中,两个类都使用Clock
的新实现来捕获分辨率中的当前时刻,最长可达纳秒。但请记住,主流计算机缺少具有如此高灵敏度的硬件时钟。微秒可能是2017年你在现实世界中看到的最好的分辨率。
答案 1 :(得分:4)
根据System.nanotime()
文档,它不是system time
,以纳秒为单位,与System.currenTimeMillis
无关。它取决于平台(这就是为什么差异)纳秒生成器,它用于测量两次调用之间经过的时间。
答案 2 :(得分:3)
[System.nanoTime]返回正在运行的Java虚拟机的高分辨率时间源的当前值,以纳秒为单位。
这意味着System.nanoTime()
以纳米为单位返回JVM的已用运行时间,而System.currentTimeMillis()
则返回自UTC时间1970年1月1日午夜起的时间(以毫秒为单位)。
这导致每次运行时的纳米时间不一致。