目录
第一步:确认docker时区
①进入容器中
②查看容器时区:
③如果不是CST,则需要修改时区
第二步确认数据库时区
②修改数据库时区
第三步确认数据库连接版本是否是6及版本以上
第四步:确认SpringBoot的时区
第五步:确认json化输出前端的时区
第一步:确认docker时区
①进入容器中
docker exec -it 容器name bash
②查看容器时区:
date
③如果不是CST,则需要修改时区
方式一、在启动容器的时候指定正确的时区。
在启动的时候多一个参数:-e TZ="Asia/Shanghai"
docker run -e TZ="Asia/Shanghai" -d -p 80:80 --name nginx nginx
方式二、如果是正在运行中的容器。
进入容器
docker exec -it 容器名/容器id bash
修改时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
退出
exit
重启容器
docker restart 容器名/容器id
第二步确认数据库时区
①查看数据库时区
SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);
②修改数据库时区
如果显示的是08:00:00则是cst时区。
如果不是cst时区,则执行Sql:
set global time_zone = '+8:00'; ##修改mysql全局时区为北京时间,即我们所在的东8区set time_zone = '+8:00'; ##修改当前会话时区flush privileges; #立即生效
第三步确认数据库连接版本是否是6及版本以上
如果是6及以上版本,则数据连接需要加上时区
jdbc:mysql://192.168.1.54:3306/......&serverTimezone=Asia/Shanghai
第四步:确认SpringBoot的时区
如果不是cst时区,则在启动文件中加上:
@SpringBootApplicationpublic class ApplyPartyApplication {public static void main(String[] args) {TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));SpringApplication.run(ApplyPartyApplication.class, args);}}
第五步:确认json化输出前端的时区
此时数据库时区、容器时区、springboot时区都是CST,输出的时间还是可能差8小时,这因为Date进行json的时候还存一个时区,而springboot默认json工具是jackson,采用的是UTC时区。需要一下配置。注意:如果项目WebMvcConfig采用的是继承WebMvcConfigurationSupport,而不是实现WebMvcConfigurer接口的话,下面的配置会不生效。
spring.jackson.date-format=yyyy-MM-dd HH:mm:ssspring.jackson.time-zone=GMT+8
如果觉得《SpringBoot时区问题解决 彻底解决时差问题》对你有帮助,请点赞、收藏,并留下你的观点哦!