【资料图】
首先我们应该知道,写到数据库里的时间,主要和你的mysql时区system_time_zone
有关,而把mysql里的数据取出来,以json形式响应到浏览器上,这个时间会经过反序列化的过程,这时时间和注解@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
有关。
1、首先查看MySQL当前的时间
time_zone说明mysql使用system的时区,system_time_zone说明system使用CST时区select curtime();show variables like "%time_zone%";
2、进行修改
直接在数据库连接串上添加时区set global time_zone = "+8:00"; #修改mysql全局时区为北京时间,也就是我们所在的东8区set time_zone = "+8:00"; #修改当前会话时区flush privileges;
serverTimezone=GMT%2B8 #表示东八区
为代码添加对象的时区注解@Column(name = "EXPIRE_DATE")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private Date expireDate;
修改k8s中pod的时区... containers: - name: xxx env: - name: TZ value: Asia/Shanghai... volumeMounts: - name: timezone mountPath: /etc/localtime volumes: - name: timezone hostPath: path: /usr/share/zoneinfo/Asia/Shanghai
总结事实上,数据库里的时间与显示出现的时间不一致,与pod的时间没关系,主要还是看你的数据库时区与@JsonFormat注解的时区。
如果@JsonFormat如果是GMT+8,而连接串里是GMT+0,会出现下面截图如果@JsonFormat如果是GMT+8,连接串里也是GMT+8,会出现我们想要的截图最后,如果@JsonFormat如果是GMT+8,连接串里也是CST(可能被认为是美国中部时间,GMT-6),那么它将会比北京时间慢8+6小时