SpringBoot+k8s+docker部署项目 遇到的时区错误问题

背景:

项目部署在亚马逊云端EC2机器上,需要迁移项目到k8s的docker容器。

遇到问题:

数据表设置字段类型为datetime,如:北京时间(UTC+8时区)2019年10月1日,

用hibernate存入数据表显示是(UTC+0时区)2019-09-30 16:00:00

分别对应时间为2019年10月1号,2019年10月2号,2019年10月3号

存入2019年10月1日,正常取出应该是2019年10月1日:

但是发现迁移到k8s的时候,

取10月份数据时,从数据库取出的数据格式是:

上述时间应该是2019年10月2号,但直接取出来忽略掉了时区。导致时间错误。

(时间类型只要是datetime,timestamp涉及到时区的,返回的都不正确)

解决方法:

直接在启动脚本(如果有start.sh的话)里面加上:

echo "Asia/Shanghai" > /etc/timezone

就是设置容器里面的时区为北京时间。

参考自:SpringBoot+k8s+docker项目 遇到的时区错误问题

上面的解决方法,

试过了不行:

一种是修改java进程启动参数,-Duser.timezone=Asia/Shanghai。尝试了以后发现不行;

一种是修改spring boot启动参数,spring.jackson.time-zone=Asia/Shanghai,发现还是不行;

=======================

当然,如果设计数据表一开始就不用datetime和timestamp类型,直接用bigint存时间戳最好啦,不用考虑时区问题。

可以看看:如何正确地处理时间

发布了164 篇原创文章 · 获赞 64 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qq_20417499/article/details/102461060