前后端時區不一致導致:
》數據不顯示在前端
》頁面顯示時間有誤
》一些對時間有要求的方法,無法正確執行,出現null值,加上我們對null值有判斷/注解,程序就會報錯中斷,以為是業務邏輯問題,其實是前后端時區有差距。
-------------------------------------
情況:前后端,數據庫都設置為+8:00 但是還是相差一天。
前端增加2025-4-9 頁面顯示為2025-4-8 ;后端攔截和數據庫均顯示2025-4-9。
解決方法:前后端改成 Asia/Shanghai ,數據庫為+8:00
-----------------------------------
1. mysql 數據庫設置全局時區為 +8:00
// 查詢當前數據庫時區
show variables like '%time_zone%';// 進入root賬戶修改全局時區,因為root默認為超級權限用戶,千萬不要把這個用戶給刪了
// 如果不小心刪了,可以借助還沒有斷開root用戶連接的第三方工具(batabase,navicat),在里面執行sql語句,給root所有的權限,再次成為超級權限用戶
mysql -u root -p//設置全局時區,重啟數據庫依然有效set gloable time_zone="+8:00";//我用的Mysql8.0 只能設置為+8:00,其他的GMT UTC Asia/Shanghai 等等都執行不了//+8:00 等效于 Asia/Shanghai 在國內的程序,最好都設為 Asia/Shanghai,不容易報錯
2. 程序所有用到時區的地方都設置為?Asia/Shanghai
1)req resp 請求的注解
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "Asia/Shanghai")
2)后端 所有配置數據庫的文件
connectionURL="jdbc:mysql://localhost:3306/train_batch?serverTimezone=Asia/Shanghai"
spring.datasource.url=jdbc:mysql://localhost:3306/train_business?serverTimezone=Asia/Shanghai
spring.jackson.time-zone=Asia/Shanghai
3) 前端的時區矯正也寫在后端對應模塊的application.properties文件里
# 前端時區矯正
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=Asia/Shanghai
4)連接數據庫的軟件配置