[alibaba/fastjson]反序列化ISO8601时间到Date类型时时间相差八小时

2025-10-31 331 views
4

前端使用ivew的DatePicker, 比如当前北京时间是: 2019-01-14 14:32:09, 前端返回给服务器的时间是控件已经处理为0时区的时间了. 格式是: 2019-01-14T06:32:09.029Z; 服务器端用JSON.parseObject反序列化为Date类型. 在jetty上运行时间是正确的会转到北京时间. 但是运行在tomcat上时,时间是错误的,还是UTC 0时区时间.服务器时区是正确的东八区. 操作系统windows和centos我都试过.换了好几个fastJson版本,包括现在最新版本.设置了-Duser.timezone=Asia/Shanghai 参数都有那个问题. 运行在jetty和tomcat上会有截然不同的结果困扰了我很久 我在换成使用JacksonJson情况下没有这个问题

回答

8

字符串时间是以0时区格式化出来的,字符串本身不带时区,如果服务器以+8时区去解析字符串 就自然会多8个小时啊。 我这么理解的

3

建议debug启动tomcat,看下堆栈。

9

遇上一样的问题了。难受

2

不好意思最后发现问题是我没有执行 mvn clean

4

话说为什么反序列化2019-01-14T06:32:09.029Z到对象属性(类型是LocalDateTime)上的时候就不行了,把Z去掉就正常.....试了fastjson和fastjson2都不行