前后端时区不一致导致:
》数据不显示在前端
》页面显示时间有误
》一些对时间有要求的方法,无法正确执行,出现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)连接数据库的软件配置