在 springboot 開發過程當中遇到一個奇怪的問題,就是已經設置系統時間GMT+8, 可是時間到數據庫後會減小14個小時。後來發現是 jvm 時區和數據庫時區設置不一致的問題。html
jvm 設置的是 GMT+8,數據庫是 CST 時區。CST 時區比較混亂,會在冬令時或夏令時致使相差 13 或 14 個小時,因此須要改爲本身須要的。mysql
spring 開發過程當中時區設置spring
1 jvm 系統時區設置,在 application.yml 配置文件中sql
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 服務器設置時區而後重啓了springboot
jdbc:mysql://localhost:3306/table_name?useUnicode=true&characterEncoding=UTF-8&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8
通過以上設置後請求時間戳和運行時時間戳和數據庫時間戳就一致了。服務器
4 數據庫查看時區命令app
show variables like '%time_zone%';
參考文獻jvm
1 https://juejin.im/post/5902e087da2f60005df05c3dpost
2 https://www.cnblogs.com/jason1990/archive/2018/11/28/10032181.html