我找不到任何具體的文檔來回答這個問題。正在運行的JVM是否檢測到計算機時區的更改?
我寫了一些簡單的測試代碼,以找出究竟發生在的Java 1.8在OS X 10.12:
public static void main(String[] _args) throws InterruptedException {
while (true) {
int calendarTimezoneOffset = Calendar.getInstance().get(Calendar.ZONE_OFFSET);
System.out.println("calendarTimezoneOffset = " + calendarTimezoneOffset);
ZoneOffset offset = ZonedDateTime.now().getOffset();
System.out.println("offset = " + offset);
Thread.sleep(1000);
}
}
無論是舊的方式(日曆)和新方法(Java 8的日期和時間庫)在JVM運行時,不會檢測到我對操作系統時區做出的任何更改。我需要停止並開始代碼以獲取更改的時區。
這是設計嗎?這是跨JVM實現和操作系統的可靠行爲嗎?
哇,另一路時區如何刺傷我們在後面......我認爲這是電腦不運行期間時區之間移動的假設的一個程序。雖然這不符合法案......我認爲當前的JVM不會改變操作系統的時區。 (不是JVM,但可能值得檢查Android是如何做到的......) – ppeterka
我認爲這可以歸類爲JVM錯誤。 – Mac70
JVM不知道有關時區的事情(規範從未提及它們,虛擬機也不需要這些信息),與時區有關的所有事情都是平臺API的一部分,也就是說,它在像java這樣的類中實現。 util.Timezone','java.util.Calendar'或'java.time'-packages'。但是在改變時區時,我沒有發現定義這些類的行爲,所以在VM運行期間不改變默認時區似乎是目前Java實現的行爲,但它絕不是保證。 –