Fastjson: Unit十位时间戳如何反序列化成DATE对象

Created on 30 May 2018  ·  5Comments  ·  Source: alibaba/fastjson

例如前端传值,"produceTime": "1521770064"
后端接收用 Date produceTime;
反序列化后日期不正确,测试13位时间戳可用

enhancement

Most helpful comment

您好,我在1.2.58的版本依然遇到了这个问题。看了下源码:
if (lexer.token() == JSONToken.LITERAL_INT) { long millis = lexer.longValue(); lexer.nextToken(JSONToken.COMMA); if ("unixtime".equals(format)) { millis *= 1000; } val = millis; } else if (lexer.token() == JSONToken.LITERAL_STRING) { ... }
也就是说现在只在{"time": 1521770064}的case下支持,不能在{"time": "1521770064"}的case下支持,这个能也支持下吗?谢谢~

All 5 comments

我也碰到了,请问解决了吗

JAVA时间戳是13位的,识别不了10位的,需要自己处理。

https://github.com/alibaba/fastjson/releases/tag/1.2.56
新版本已经支持,配置

JSONField(format="unixtime")

您好,我在1.2.58的版本依然遇到了这个问题。看了下源码:
if (lexer.token() == JSONToken.LITERAL_INT) { long millis = lexer.longValue(); lexer.nextToken(JSONToken.COMMA); if ("unixtime".equals(format)) { millis *= 1000; } val = millis; } else if (lexer.token() == JSONToken.LITERAL_STRING) { ... }
也就是说现在只在{"time": 1521770064}的case下支持,不能在{"time": "1521770064"}的case下支持,这个能也支持下吗?谢谢~

@wenshao 我遇见和楼上同样的问题您好,我在1.2.58的版本依然遇到了这个问题。看了下源码:
if (lexer.token() == JSONToken.LITERAL_INT) { long millis = lexer.longValue(); lexer.nextToken(JSONToken.COMMA); if ("unixtime".equals(format)) { millis *= 1000; } val = millis; } else if (lexer.token() == JSONToken.LITERAL_STRING) { ... }
也就是说现在只在{"time": 1521770064}的case下支持,不能在{"time": "1521770064"}的case下支持,这个能也支持下吗?谢谢~

Was this page helpful?
0 / 5 - 0 ratings