在 springboot 開發過程中遇到一個奇怪的問題,就是已經設置系統時間GMT+8, 但是時間到數據庫后會減少14個小時。后來發現是 jvm 時區和數據庫時區設置不一致的問題。
jvm 設置的是 GMT+8,數據庫是 CST 時區。CST 時區比較混亂,會在冬令時或夏令時導致相差 13 或 14 個小時,所以需要改成自己需要的。
spring 開發過程中時區設置
1 jvm 系統時區設置,在 application.yml 配置文件中
spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8
2 在請求參數中,使用 JsonFormat 配置解析規則
import com.fasterxml.jackson.annotation.JsonFormat; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date birthday;
3 在數據庫連接中設置時間的解析時區,該方法不需要 mysql 服務器設置時區然后重啟了
jdbc:mysql://localhost:3306/table_name?useUnicode=true&characterEncoding=UTF-8&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8
經過以上設置后請求時間戳和運行時時間戳和數據庫時間戳就一致了。
4 數據庫查看時區命令
show variables like '%time_zone%';
參考文獻
https://www.cnblogs.com/zhaopengcheng/p/12124973.html