首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Windows XP 更新後 Java 取得時間偏移 8 小時解決方案:登錄檔修復大法

     編輯:Java 相關知識

問題現象

XP 自動更新安裝時區補丁後,Java 程式取得的時間比系統時間少 8 小時(東八區應為 +8,卻變成 UTC)。

常見但不完美的程式碼修正法

// 方法 1:系統屬性
System.setProperty("user.timezone", "Asia/Shanghai");

// 方法 2:強制設定預設時區
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));

缺點:只對當前 JVM 生效,應用伺服器 (Tomcat, WebLogic 等) 記錄的日誌時間仍會錯誤,需逐一修改所有應用程式碼。

根因分析:登錄檔時區資料損毀

對比未更新機器,發現註冊機碼 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones 大小從 128KB 縮減為 72KB,關鍵時區定義遺失導致 Java JRE 讀取錯誤。

徹底解決:匯入正常機器的時區註冊機碼

  1. 在正常機器上:regedit → 匯出上述機碼為 TimeZones.reg
  2. 複製到有問題機器,雙擊匯入
  3. 重啟 IDE / 應用伺服器,Java 取得時間即恢復正常

此法一勞永逸,無需修改任何 Java 程式碼,所有 JVM 皆受益。

補充說明

  • 若系統還原點存在,亦可嘗試還原系統狀態
  • 手動解除安裝該更新補丁 (KB 編號) 通常失敗,因時區更新屬於累積性補丁
  • Java 8 以降版本內建 tzdb,較不依賴作業系統時區資料,問題較少發生
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved