fastjson SerializerFeature.UseISO8601DateFormat进行序列化时的日期格式问题

u5rb5r59  于 2021-11-27  发布在  Java
关注(0)|答案(3)|浏览(276)
日期数据(date类型):

1.2018-05-02 00:00:00 (1525190400000)
2.2018-05-02 10:39:27 (1525228767190)

期望结果(UseISO8601DateFormat序列化):

2018-05-02T00:00:00+08:00
2018-05-02T10:39:27+08:00

实际结果如下:

2018-05-02+08:00
2018-05-02T10:39:27+08:00

测试用例

Date date1=DateUtil.formatDate("2018-05-02 00:00:00");
Date date2=DateUtil.formatDate("2018-05-02 10:39:27");
JSONObject obj = new JSONObject();
obj.put("date1", date1);
obj.put("date2", date2);
String result = JSON.toJSONString(date, SerializerFeature.UseISO8601DateFormat);
System.out.println(result);
result :
{"date2":"2018-05-02T10:39:27+08:00","date1":"2018-05-02+08:00"}

此问题从早期版本以及最新版本一致存在

kcrjzv8t

kcrjzv8t1#

2018-05-02+08:00

这个也是iso8601格式哦

cqoc49vn

cqoc49vn2#

@wenshao 是倒能和期望一样吗

pcww981p

pcww981p3#

这个问题是作者故意这样设计的(DateCodec.java),可以讨论下是否需要修改: @wenshao

if (second == 0 && minute == 0 && hour == 0) {
                    buf = "0000-00-00".toCharArray();
                    IOUtils.getChars(day, 10, buf);
                    IOUtils.getChars(month, 7, buf);
                    IOUtils.getChars(year, 4, buf);
                } else {
                    buf = "0000-00-00T00:00:00".toCharArray();
                    IOUtils.getChars(second, 19, buf);
                    IOUtils.getChars(minute, 16, buf);
                    IOUtils.getChars(hour, 13, buf);
                    IOUtils.getChars(day, 10, buf);
                    IOUtils.getChars(month, 7, buf);
                    IOUtils.getChars(year, 4, buf);
                }

相关问题