2017-02-26 206 views
4

我想獲取當前的ZoneOffset我的系統。
我試圖做到這一點,但我找不到方法。
此外,我正在尋找一個解決方案,但我沒有找到任何。
在Java中可以這樣做嗎?

Java 8 ZoneOffset - 如何獲得當前系統的UTC偏移量

編輯:
我的問題是this不同。我想知道UTC的當前系統,而不是如何在TimeZone偏移表示或TimeZone存儲之間進行轉換。

+2

[Java TimeZone偏移]的可能重複(http://stackoverflow.com/questions/11399491/java-timezone-offset) –

回答

7

是的,這是可能的:

ZoneOffset.systemDefault().getRules().getOffset(Instant.now()) 

,或者你可以用LocalDateTime實例來替換即時實例:

ZoneOffset.systemDefault().getRules().getOffset(LocalDateTime.now()) 
+3

這兩個選項之間有一個關鍵區別。 「即時」版本將始終提供正確的答案。 LocalDateTime版本會給出[「最佳可用偏移量」](https://docs.oracle.com/javase/8/docs/api/java/time/zone/ZoneRules.html#getOffset-java.time。 LocalDateTime-)。這是因爲DST,LocalDateTime可能有兩個有效的偏移量,或者沒有。 – JodaStephen

7

你的要求有兩個部分:

  • 了「偏移我係統「 - 因此您需要系統時區 - ZoneId.systemDefault()
  • 「當前」 偏移 - 因此你需要的電流瞬間 - Instant.now()

這些被捆綁在一起使用ZoneRules,得到如下:

ZoneOffset o = ZoneId.systemDefault().getRules().getOffset(Instant.now()); 

對於simplicty,您可能希望使用OffsetDateTime

ZoneOffset o = OffsetDateTime.now().getOffset(); 

這工作,因爲OffsetDateTime.now()內部使用ZoneId.systemDefault()Instant.now()

相關問題