java 獲取時間與系統時間不一致問題
最近專案部署到伺服器上,發現時間不對,與當前時間相差12個小時,第一反應是 系統時間是不是不對。通過date 命令檢視,
發現系統用的是est 時區 (EST eastern standard time (美國)東部標準時間 慢北京時間 13個小時。)
那就是簡單了 ,修改下時區就好了。於是按照晚上的命令將系統時區修改了下。時間正常了,重新執行程式,問題仍能存在,還是相差13個小時。以為是有快取什麼的,能後就重啟系統試試,重啟後再次執行程式,還是相差13個小時 ,被這個快搞得精疲力盡了
能後寫了個測試介面放到伺服器上。通過呼叫發現。返回的時間還是忙13個小時。剛剛好,不多一份也不少一秒,所以猜測還是時區的問題。所以順便也列印了下時區。發現時區還是EST 時區沒有變過來。
能後上午搜尋了下,發現也有網友遇到過相似的問題,他給出的解決方案是
當然我會給出解決方案:
方法一:JVM執行時增加引數,指定時區 -D user.timezone=GMT+08
方法二:直接在程式中設定時區。System.setProperty(“user.timezone”,”GMT +08″);
方法三:直接加上28800就好了(8hours*60min*60sec=28800)
照著這位網友的思路。和搜尋相關操作步驟,在tomcat 啟動的時候,設定個預設時區方法是在 catalina.sh 檔案中新增如下這行程式碼
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF8
-Duser.timezone=GMT+08"
重新啟動tomcat 正常了。
不過不知道為什麼,系統的時區已經修改了,但是程式獲取到的時區還是沒有修改過來,不知道這個是不是和伺服器有關因為伺服器用的是虛機,都是在一臺伺服器上虛擬出來的。程式獲取的不是虛機的時間,而且主機的時間。 以上只是猜測,還待驗證