java取出mysql時間字段,相差數個小時

#情景描述
以Mysql做爲數據庫的JavaWeb項目,對於Mysql中的Time,Date,DateTime類型,Java的對應類型都是Date。Java程序在存儲和讀取相應字段的數據的時候,有時候會發現,存進去的不是預期的時間值,或者讀取出來後發現和實際預期的會有誤差。舉個例子,想要操做存儲的時間是2017-01-01 08:00:00,可是實際呈現出來的是2017-01-01 08:00:00,差了8小時有沒有?這個會根據不一樣狀況有所相差,通常都差一些個小時數,對應的分和秒數據倒是一致的。mysql

#問題分析 mysql中發現存的確實是2017-01-01 08:00:00,可是Java中讀取中到對應的Entity中時就自動變成2017-01-01 16:00:00,這個從數據庫中讀取出來就沒有通過其餘程序的任務處理直接就變更了。分析可能就是由於Web服務器上的時區/時間和Mysql服務器時區時間不一致。sql

1.可能JavaWeb項目中時區和Mysql時區不一致 在mysql中進入命令模式,敲入下面命令: show variables like '%time_zone%';經過該命令能夠查看MySQL時區。數據庫

Java程序中,使用TimeZone.getDefault()服務器

兩者對比一下查看是否不一樣時區,不一致的狀況下對時區進行調整到一致.net

2.上述時區一致時,還出現該狀況,查查是否Java Web項目鏈接串中加了?servertimezone=utc,嘗試去掉,再試試結果看看,這裏網上有人說去掉後會出現沒法識別timezone的亂碼問題,建議不要使用mysql connector 6.0.x以上版本,要使用5.1.x的版本,而且不加上servertimezone。多是個BUGserver

#問題解決 我遇到的狀況是相差了八個小時,時區不一致,且改爲一致了後還出現。其中解決方法是這樣的:blog

show variables like '%time_zone%'; TimeZone.getDefault() 發現不一致,而後修改了Mysql的時區get

修改Mysql時區命令it

set time_zone='+8:00'; show variables like '%time_zone%';亂碼

查看後改變了,再運行,仍是出現了問題

而後把mysql鏈接串servertimezone去掉也不行,換成GMT也不行

最後變成Asia/Shanghai或者PRC才能夠,目前項目時間上正常了。

附上國際時區 TimeZone ID列表

相關文章
相關標籤/搜索