繁体   English   中英

日期的JSON序列化和Java解析

[英]JSON serialisation of Date and parsing in Java

我目前正在对日期进行序列化的前端。 我似乎找不到正在使用的ISO标准以及如何使用GSON在Java中解决此问题。

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

默认情况下,GSON似乎无法处理该日期,如果它带有-或+表示法,则在我的嘲笑McMvc测试(春季)中运行良好。

这是什么格式的任何指南,以及如何解决? 由于名称不清楚,我在使用Google搜索时遇到了麻烦

好吧,所以我走得更远,做了一个像这样的Message转换器,它受到了欢迎,但仍然无法使用提供的可能选项转换我的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));
        }
    }
}

语言环境德国不是必需的。

问题!

您可以尝试以下代码:

 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

格式为ISO_8601

您可以使用日期格式库日期格式如图所示这里

因此,我一直在戏弄观察者等。

我不知道为什么,但是似乎应该在前面解析Z,但不是这样。

目前,我通过允许以下格式来使其工作:“ yyyy-MM-dd'T'HH:mm:ss.SSS'Z'” <=请注意,Z用单引号引起来。 我留下了常规的“ yyyy-MM-dd'T'HH:mm:ss.SSSZ”作为第二个猜测。

谢谢大家的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM