中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么解決java獲取時間相差8小時的問題

發布時間:2021-09-13 15:13:30 來源:億速云 閱讀:752 作者:小新 欄目:開發技術

小編給大家分享一下怎么解決java獲取時間相差8小時的問題,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

三種時間差錯問題:

  • java下使用new date()獲取的時間會和真實的本地時間相差8小時。

  • 本地獲取的時間沒有錯,存入數據庫的時候時間相差8小時。

  • 數據庫時間沒有錯,獲取到了后端,之后返回給前端相差8小時。

原因:

  • new date()調用的是jvm時間,而jvm使用的時間默認是0時區的時間,即:和北京時間將會相差8小時。

  • mybatis將本地的數據傳入到mysql數據庫服務器的時候,服務器會對數據進行檢測,會把date類型的數據自動轉換為mysql服務器所對應的時區,即0時區,所以會相差8小時。

  • springboot中對加了@RestController或者@Controller+@ResponseBody注解的方法的返回值默認是Json格式,

  • 所以,對date類型的數據,在返回瀏覽器端時,會被springboot默認的Jackson框架轉換,而Jackson框架默認的時區GMT(相對于中國是少了8小時)。所以最終返回到前端結果是相差8小時

解決方案:

手動設置jvm時間:將時間改為第8時區的時間:

TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));

溫馨提示:如果是springboot項目,可以面向切面加上這個,或者啟動main類上加上如下代碼:

@PostConstruct
    void started() {
        TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
    }

注意:不要用下面方式,這個方式是錯的,GMT-8最后獲取的時區還是0時區的。網上很多的教程說的是下面的方式,親測不行。

TimeZone tz = TimeZone.getTimeZone("ETC/GMT-8");
TimeZone.setDefault(tz);

在apprication.yml文件中配置一下數據庫連接信息,url加上這么一句:
&serverTimezone=GMT%2b8

怎么解決java獲取時間相差8小時的問題

可以解決存入數據庫的時間肯定是對的,本地獲取的時間則未必是北京時間。將spring的json構造器的時區改正即可,在application.yml文件中添加:

怎么解決java獲取時間相差8小時的問題

或者可以使用注解,在entity實體類的date數據上添加注解,那么數據庫傳回的data數據要轉換為json格式的時候就是北京時間了,再次傳回到前端的時候,也不會出現時區問題。

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
 private Date lastTime;

不過,指的注意的是:這樣做,如果你的jvm時間依然是后臺0時區的,那么后臺要用時間執行邏輯的時候,就要注意了,時間依然相差8小時,還是建議用第一方法,直接整個jvm改為北京的8時區。

以上是“怎么解決java獲取時間相差8小時的問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

遂平县| 苏州市| 红安县| 昆明市| 区。| 博白县| 上蔡县| 汾西县| 昌宁县| 从化市| 铜山县| 工布江达县| 正镶白旗| 儋州市| 称多县| 栾城县| 淮阳县| 疏附县| 阿尔山市| 苍南县| 东辽县| 于都县| 丰顺县| 沅江市| 阳春市| 江口县| 泸定县| 平江县| 台州市| 桦甸市| 堆龙德庆县| 鹤山市| 开鲁县| 吉首市| 鄂尔多斯市| 新宾| 芦溪县| 东乌| 赣州市| 壤塘县| 延吉市|