2017-10-12 32 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我一點也不惱火。盡我所能幫助我。我相信你在閱讀我的答案時太多了。如果有粗俗/冒犯的具體措辭,請指出。 –

相關問題