2017-06-14 23 views
3

TimeZone.getDefault()返回系統時區,直到它被更改。如何在Java中獲取操作系統時區?

示例1:

System.out.println(TimeZone.getDefault()); 

結果:

Europe/Kaliningrad 

這是系統時區。

示例2:

TimeZone.setDefault(TimeZone.getTimeZone("Asia/Kolkata")); 
System.out.println(TimeZone.getDefault()); 

結果:

Asia/Kolkata 

它不是系統時區,系統時區仍然是歐洲/加里寧格勒。

那麼即使更改默認DateTimeZone後,如何獲得系統時區。

+0

在原來職位的答案https://stackoverflow.com/questions/24806183/get-date-in-current-timezone-in-java – user7294900

+1

@ user7294900,它返回亞洲/加爾各答,而不是歐洲/加里寧格勒 – Evgenia

+0

你在期待什麼?當你調用'setDefault'時,它會改變整個JVM的默認時區**,這是預期的行爲**。如果你不想改變它,那麼不要調用'setDefault'(或者在改變默認值之前將時區保存在一個變量中,正如下面的答案中所建議的那樣)。 – 2017-06-14 12:21:56

回答

0

商店TimeZone.getDefault()中的變量如下代碼

TimeZone.setDefault(TimeZone.getTimeZone("Asia/Kolkata")); 
System.out.println(TimeZone.getDefault()); 

並在以後使用變量之前的值。

+0

我希望有更美麗的解決方案。 – Evgenia

+0

@Evgenia TimeZone.setDefault覆蓋了系統時區,因此將系統時區存儲在變量中似乎是不錯的選擇。 – Bishwash

1

您可以檢查系統屬性user.timezone:

System.getProperty("user.timezone") 
+0

它爲我返回空字符串。 – Evgenia