问题
同一份程序使用时间LocalDateTime类型,在国内和国外部署后,返回的时间信息前端使用出问题。 因为LocalDateTime不带时区信息,国内调用后,前端页面默认使用的浏览器所在os的时区(我们的系统中没有给用户设置时区), 因此会出现时间不一致, 或者判断超时了,但是实际上没有超时的问题。
解决方式:
要么返回timestamp数字类型,前端自己解析。 缺点:直接使用api的同事不方便看操作时间信息。
用户可以可以在个的profile中设置时区,方便各个时区用户在一个系统中操作。 缺点:改动较多。
最后的折中方法:
后端内部使用ZonedDateTime,返回的时间中带上时区信息。 备注:这里应用系统没有使用数据库,因为没有使用数据库时间格式。
这里🈶遇到一个问题,国内机器都是时区为

springboot 程序启动后,ZoneDateTime 格式默认是"2023-02-16T21:44:31.914407+08:00";

但是国外的机器不行,依然不带时区信息。
在jvm启动参数中指定时区信息
国内启动不指定时间,os默认的是"Asia/Shanghai"。 国外的启动参数指定为-Duser.timezone=CET
示意:(这里是示意,省略其他参数,实际参数要跟多)
Java -jar -Dspring.profiles.active=dev -Duser.timezone=CET app.jar
具体代码
1,ObjectMapper中设置时区和时间格式
ObjectMapper mapper = new ObjectMapper(

文章描述了在使用LocalDateTime类型时遇到的时区问题,导致国内外部署后时间显示不一致。解决方案包括返回Timestamp或让用户设置时区。最后选择了后端使用ZonedDateTime并设定时区,但国外机器仍不带时区信息。通过在JVM启动参数指定时区以及在ObjectMapper中设置,解决了序列化时不带时区的问题。
381

被折叠的 条评论
为什么被折叠?



