[英]System.nanoTime and System.currentTimeMillis()
我在 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)
System.nanotime
與當前日期和時間無關。 它的目的是計算經過的時間。
您的數學計算以及與System.currentTimeMillis()
比較根本沒有任何意義。 這兩個功能是不可比的。
在發布到 Stack Overflow 之前閱讀文檔。
對於日期時間處理,您根本不應該使用System
類。 而是使用內置於 Java 8 及更高版本中的行業領先的 java.time 類。
Instant.now()
。ZonedDateTime.now
。 在 Java 9 及更高版本中,這兩個類都使用Clock
的新實現以高達納秒的分辨率捕獲當前時刻。 但請記住,主流計算機缺乏具有如此高靈敏度的硬件時鍾。 截至 2017 年,微秒可能是您在現實世界中看到的最佳分辨率。
根據System.nanotime()
文檔,它不是以納秒為單位的system time
,也與System.currenTimeMillis
無關。 它是平台相關的(這就是差異的原因)納秒生成器,它用於測量兩次調用之間經過的時間。
[System.nanoTime] 返回正在運行的 Java 虛擬機的高分辨率時間源的當前值,以納秒為單位。
這意味着System.nanoTime()
以 nanos 為單位返回 JVM 的運行時間,而System.currentTimeMillis()
返回自 UTC 1970 年 1 月 1 日午夜起以毫秒為單位的時間。
這會導致每次運行的 nanoTime 不一致。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.