2017-05-27 262 views
1

以下行返回相同的值相同的值,即使它們是在不同的時區的Java 8 - toEpochSecond返回不同的時區

System.out.println(Instant.now().atZone(ZoneId.of("GMT+04")).toEpochSecond()); 
System.out.println(Instant.now().atZone(ZoneId.of("GMT+02")).toEpochSecond()); 

我是不是做錯了什麼或者我根本沒有理解它是如何工作?

回答

4

作爲每javadoctoEpochSecond()給出因爲1970-01-01 00:00:00 UTC ,以符合definition of epoch秒數。

所以這是預期的結果:兩個即時值是相同的。在轉換爲分區值後,它們仍然代表相同的時間點,與時區無關。所以,從時代開始轉換爲秒,你會得到相同的價值。

如果我試着一步一步:

// Now: 
2017-05-27T23:46:00.324Z 
// Now GMT+04: 
2017-05-28T03:46:00.324+04:00[GMT+04:00] 
// Now GMT+02: 
2017-05-28T01:46:00.324+02:00[GMT+02:00] 
// Both values represent the same point in time, i.e. that many seconds since epoch (which is defined UTC): 
1495928760 

我希望這將有助於推動點回家,並不會帶來更多的困惑:這個的另一個後果(時代定義爲UTC爲主)是,如果你在智利,烏干達或蒙古同時執行System.currentTimeMillis(),您將獲得相同的值(如果系統時鐘已正確同步)。

+0

謝謝。你能提供一個例子,根據時區返回1970年1月1日以來的秒數嗎? –

+1

嗯,我在移動設備上,暫時無法啓動好的代碼片段。但也...抱歉,我不明白這個問題。什麼是你想要轉換的東西的輸入和輸出(類型和值)? (換句話說,給定X你想要Y,請定義X&Y) –

+5

@DouaBeri:這是一件非常奇怪的事情想要知道,並且可能表明你試圖做錯事。你究竟在努力實現什麼? –

相關問題