問題描述如標題。
解決過程如下:
就算在容器里面使用: 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作為你默認的時間區域。
參考博文:
(13條消息) JVM加載TimeZone讀取文件優先級實戰分析_weixin_34072159的博客-CSDN博客