keycloak~时间不正确的问题

打印 上一主题 下一主题

主题 946|帖子 946|积分 2838

首先我们应该知道,写到数据库里的时间,主要和你的mysql时区system_time_zone有关,而把mysql里的数据取出来,以json形式响应到浏览器上,这个时间会经过反序列化的过程,这时时间和注解@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")有关。
和我们相关的几个时区


  • UTC: Coordinated Universal Time, 国际协调时间,也称世界标准时间。
  • GMT:Greenwich Mean Time, 格林尼治时间
  • CST:中国标准时间(China Standard Time),为GMT+8
  • BST:英国夏令时间,为GMT+1
  • CST:美国中部时间(Central Standard Time),为GMT-6,正常比北京慢14小时,夏令时慢13小时
  • 东八区:GMT+8
数据库时区

1、首先查看MySQL当前的时间
select curtime();
show variables like "%time_zone%";
time_zone说明mysql使用system的时区,system_time_zone说明system使用CST时区

2、进行修改
set global time_zone = '+8:00'; #修改mysql全局时区为北京时间,也就是我们所在的东8区
set time_zone = '+8:00'; #修改当前会话时区
flush privileges;
直接在数据库连接串上添加时区

serverTimezone=GMT%2B8 #表示东八区
为代码添加对象的时区注解
  1. @Column(name = "EXPIRE_DATE")
  2. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  3. private Date expireDate;
复制代码
修改k8s中pod的时区
  1. ...
  2.   containers:
  3.   - name: xxx
  4.     env:
  5.       - name: TZ
  6.         value: Asia/Shanghai
  7. ...
  8.     volumeMounts:
  9.       - name: timezone
  10.         mountPath: /etc/localtime
  11.   volumes:
  12.     - name: timezone
  13.       hostPath:
  14.         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小时



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表