最近做的一個springboot2.0項目。
前提是我的服務器時區沒有問題:
[root@wangbo ~]# date -R Mon, 22 Apr 2019 19:24:33 +0800
可以參考:查看和修改Linux服務器的時區和時間
使用MySQL57,(程序中打印的時間字段)查詢出的時間字段總是和數據庫存儲的相差兩個小時。
最后是通過修改數據庫連接解決了這個問題。添加了下面這個屬性。
&serverTimezone=Asia/Shanghai
接着又出現問題了。
默認情況下使用 @ResponseBody ,項目返回的JSON數據,返回對象會自動轉為JSON格式,但是對象中的日期格式Date字段轉換的時候相差了八小時,程序內打印時間沒有問題,如果將 Date 改為 String 類型的話,也不會出現這種情況了。
所以問題應該出在返回結果格式化為JSON的這個過程中。
原因是spring轉json的默認實現jackson中會根據時區去轉換時間,而jackson的默認時區跟國內應該是相差8小時,所以在時間換算上自動減去了8小時。
可以通過jackson 的注解 @JsonFormat 解決問題
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss" ,timezone = "GMT+8") private Date createTime; @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss" ,timezone = "GMT+8") private Date updateTime;
也可以在 SpringBoot 配置文件中統一配置,推薦使用這種方式:
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GTM+8