2011-11-08 46 views
0

當System.currentTimeMillis發生改變時,可能的原因是什麼?CurrentTimeMillis正在改變,任何可能的原因?

說currentTimeMillis只在2分鐘後改變1和2分鐘小時。相關的日光節約?

一個可能的原因是時間同步到正確的時間,其他可能的原因是什麼?

+3

我想只會發生*期望*'currentTimeMillis()'經常改變......你知道的留*當前*。大概你有一種不同的變化 - 也許你可以告訴我們什麼? –

+0

呃,它比以前更晚了嗎? –

+0

你的意思是什麼改變 - 它會一直改變 - 這是底層時鐘的時間。如果你多次打電話,你會得到不同的結果。 – gkamal

回答

0

System.currentTimeMillis()根據其文檔返回當前時間與1970年1月1日午夜UTC之差(以毫秒爲單位)。因此顯然它一直在迅速變化。需要注意的是,它指的是可隨時調整的壁鐘!

也就是說,如果某人或某事 - 可能是自動NTP同步器 - 只是簡單地調整計算機的時鐘或日期,它將跳過 小時,因爲 daylight saving time 是任意數量。如果您需要測量東西需要多長時間,您應該使用定時器,例如, System.nanoTime(),它保證單調地變化,而不是一個時鐘(這是應該是而不是保證指的是某個固定點)。

+3

由於以UTC爲單位進行測量,因此*不受夏令時影響。 –

+0

@Joona,你能不能告訴我偶爾有什麼意思。 – user705414

+0

@Joona,你的意思是我必須使用NanoTime而不是CurrentTimeMillis – user705414

0

我纔開始猜測 - 主要是我看到2個可能的原因:

  • 因爲01.01.1970 00你正在寫從毫秒轉換:00UTC自己,做somwhere一個錯誤(我們將需要的代碼)
  • 有一些點在實際的返回值使得3600000(例如跳躍跳躍,如果你更改系統時鐘,或者你使用更新時間NTP)