問題描述如标題。
解決過程如下:
就算在容器裡面使用: date -R 檢視時間時區也是東八區正常的。
但是對于JVM所使用的時區來說它卻不認這個時區的。JVM所使用的時區有一個順序的加載。
鏡像的作業系統是:
JVM讀取時區檔案順序依次為:$TZ
> /etc/timezone
/etc/localtime
預設GMT
,跟檔案 /etc/sysconfig/clock
無關。
在這裡用的容器裡面是沒有 $TZ系統變量的。
然後看下 cd /etc看下有沒有 /etc/timezone
發現也是沒有的。
最後看下/etc下面有沒有
localtime
發現有而且指向UTC時區,這就是為什麼時間對不上的原因。 解決辦法:啟動腳本裡加上:
-Duser.timezone=Asia/Shanghai -Dfile.encoding=utf8 多加的編碼是好習慣的問題。
預設GMT說明:java.util.TimeZone類中getDefault方法的源代碼顯示,它最終是會調用sun.util.calendar.ZoneInfo類的getTimeZone 方法。這個方法為需要的時間區域傳回一個作為ID的String參數。這個預設的時間區域ID是從 user.timezone (system)屬性那裡得到。如果user.timezone沒有定義,它就會嘗試從user.country和java.home (System)屬性來得到ID。 如果它沒有成功找到一個時間區域ID,它就會使用一個"fallback" 的GMT值。換句話說, 如果它沒有計算出你的時間區域ID,它将使用GMT作為你預設的時間區域。