标题写这么多技术,是为了方便准确定位。自己在查找资料的时候,搜到的很多相关度很低的。而且大部分文章都是直接copy,因此做个仔细总结在此。
场景描述:测试反馈一个bug,说所有记录的时间与数据库不匹配。事实确实是这样的,但是感觉非常奇怪。因为我只是把数据从数据库里读出来,读出来的是Date类型,然后我转成时间戳存到了es里面,再从es读出来发现时间就不对了。首先我想不是代码的问题。仔细核对了数据,忽然发现一个规律,所有记录的时间都慢了8个小时,8个小时不正是每个时区的间隔吗?于是想到可能是时区的问题。
查找下查看linux系统时区的方法,发现了很多:
常用的是 date -R
[root@lnx01 ~]# date -R
Sun, 11 Jan 2015 23:06:02 +0800
后面是+0800 代表是东八区。
而我是用另一种方法,cat /etc/timezone 显示的却是 UTC
很明显我的项目是用这个这个时区,但是系统里的时间却是用东八区显示,至于这两者为什么不统一还不清楚。那么现在的问题就是让我的项目用东八区的时区即可。
我的项目是基于docker部署的,生成镜像的是有修改时区
但是没有起作用
想到了几种办法:
一种是修改java进程启动参数,-Duser.timezone=Asia/Shanghai。尝试了以后发现不行;
一种是修改spring boot启动参数,spring.jackson.time-zone=Asia/Shanghai,发现还是不行;
在网上看到一个网友的评论,得到启发
其实本来早该想到,怎奈好久没写shell,忘了怎么修改文件内容了。只要把这个文件内容覆盖掉就好了。于是修改docker文件
发现问题解决了,spring boot打出来的日志时间正确了,数据存入也正确了。