各位大佬,俺们开发过程中遇到一个问题,涉及到 docker java mysql ,其中在分享物联网设备的过程中,时间差了 8 个小时,保存到 mysql 的时间是 utc 时间,java 获取的也是 utc 时间,而 java 返回给用户的时间会通过调用 mysql 过程中自动设置在 utc8 时间。
为啥会差 8 小时呢,请大佬指导。
1 ZeawinL 2024-08-12 14:46:31 +08:00 via iPhone 时区。 建议用服务器时间,而不是 now()之类的函数。 |
2 cJ8SxGOWRH0LSelC 2024-08-12 14:48:38 +08:00 在程序启动的时候设置一下属性。 // 设置默认时区为 UTC+8 (东八区) TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai")); |
![]() | 3 dengshen 2024-08-12 14:55:15 +08:00 1 楼正解! 把本机的时区配置文件带进去容器 |
![]() | 4 KagurazakaNyaa 2024-08-12 15:01:34 +08:00 ![]() 所有时间都用 uint64 来存,只存 timestamp ,在展示时再附加时区信息转换为人类可读时间 |
![]() | 5 zzlyzq OP @dengshen 有道理。但是用的华为的 CCE ,非自建 k8s 集群,没法挂时区文件了。倒是,Dockerfile 中已经做了上海的时区文件。 |
6 julyclyde 2024-08-12 16:41:29 +08:00 |
![]() | 7 zzlyzq OP ![]() 经测试,与 jdk 容器环境有关系,测试了几个主要的版本 8u111 8u412 没有问题,8u342 有问题,可以通过增加-Duser.timezOne=Asia/Shanghai 解决。 |
8 yuanmomo 2024-08-13 17:57:45 +08:00 via iPhone @XiLingHost ve 这个才是正确的做法。 |
9 julyclyde 2024-08-14 12:48:56 +08:00 now 函数没带时区属性吗? |