JSON序列化日期和Java解析

时间:2016-02-26 13:08:00

标签: javascript java json simpledateformat

我目前正在开发一个序列化日期的前端。我似乎无法找到正在使用的ISO标准以及如何使用GSON在Java中解决此问题。

当我使用默认序列化时,我的Javascript日期被格式化为类似2016-02-26T11:06:36.646Z的东西,困扰我的是。分钟后。我不确定这是什么格式,我希望它会返回+1:00或类似的东西。

默认情况下,GSON似乎无法处理此日期,如果使用 - 或+表示法,它在我的mockMvc测试(Spring)中运行正常。

任何格式化的指导,以及如何解决?因为名字不清楚,我在谷歌上搜索麻烦

好吧,所以我进一步做了一个像这样的消息转换器,它被击中但仍然无法转换我的dateString与提供的可能选项(你可以看到我添加了4,我想要的第一个工作)。

public class ExtendedGsonHttpMessageConverter extends GsonHttpMessageConverter
{
    private static final String[] DATE_FORMATS = new String[] {
            "yyyy-MM-dd'T'HH:mm:ss.SSSZ",
            "yyyy-MM-dd'T'HH:mmZ",
            "yyyy-MM-dd'T'HH:mm:ssZ",
            "yyyy-MM-dd'T'HH:mm:ss-'07:00'"
    };


    public ExtendedGsonHttpMessageConverter()
    {
        super();
        super.setGson(buildGson());
    }
    protected static Gson buildGson() {
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());
        return gsonBuilder.create();
    }

    private static class DateDeserializer implements JsonDeserializer<Date> {

        @Override
        public Date deserialize(JsonElement jsonElement, Type typeOF,
                                JsonDeserializationContext context) throws JsonParseException {
            for (String format : DATE_FORMATS) {
                try {
                    return new SimpleDateFormat(format, Locale.GERMANY).parse(jsonElement.getAsString());
                } catch (ParseException e) {
                }
            }
            throw new JsonParseException("Unparseable date: \"" + jsonElement.getAsString()
                    + "\". Supported formats: " + Arrays.toString(DATE_FORMATS));
        }
    }
}

德国的地方不是必需品。

The problems!

3 个答案:

答案 0 :(得分:1)

您可以尝试以下代码:

final GsonBuilder builder = new GsonBuilder();
final Gson gson = builder.setDateFormat("yyyy-MM-dd'T'HH:mm:ss-'07:00'")
                      .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
                      .create();

https://github.com/kreneskyp/openconferenceware-android/blob/master/src/org/osb/GsonFactory.java

答案 1 :(得分:1)

格式为ISO_8601

您可以使用dateformat库格式化日期here

答案 2 :(得分:0)

所以我一直在玩观察者等等。

我不知道为什么,但看起来Z应该在前面解析,结束不是这样。

目前我通过允许以下格式实现了它: &#34; YYYY-MM-DD&#39; T&#39; HH:MM:SS.SSS&#39; Z&#39;&#34; &lt; =注意Z被单引号括起来。 我离开了常规&#34; yyyy-MM-dd&#39; HH:mm:ss.SSSZ&#34;作为第二个猜测。

感谢大家的帮助。