mysql的时区问题
通过以下sql语句查看mysql的时区
show variables like "%time_zone%";
若"time_zone"行为 “SYSTEM” 字符串 可通过
SET time_zone = "Asia/Shanghai";//修改当前会话的时区,退出会话后失效
SET global time_zone = "Asia/Shanghai"; //修改全局会话的时区,重启服务后失效(推荐用这个)
修改后可通过
select now();
语句查看数据库时间是否正确
springboot服务端date类型数据时区问题
若数据库时间正确,但springboot服务端返回的date类型数据与数据库中的date类型数据相差8小时的话,可在配置文件中加入以下语句
spring.jackson.time-zone=GMT+8
这是因为springboot中的@RestController 注解使得接口返回的JSON数据中的date类型数据会被springboot中的Jackson框架转换,而Jackson框架的默认时区是GMT。
若仍然无法解决问题,可能是docker容器的时区问题,可通过
docker exec -it 容器id bash
进入容器内,输入
/# date
Sat Nov 18 18:30:01 UTC 2023
命令查看容器内的时间与时区
然后通过在Dockerfile文件中加入以下内容
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
然后重新build一个docker镜像,重新运行起来后,进入容器内查看时区,
/# date
Sun Nov 19 02:40:10 CST 2023