我当前使用的API以“ yyyy-MM-dd”的形式以及典型的ISO8601格式“ 2012-06-08T12:27”返回日期(出于这个问题,日期和日期时间相同) :29.000-04:00”
您如何“干净”地设置GSON来处理此问题?还是我最好的方法是使用模型对象中的一些自定义getter将日期视为字符串并以所需的特定形式输出?
我目前正在执行以下 *** 作,但是只要看到“ yyyy-MM-dd”字段,解析就会失败.
return new GsonBuilder() .setFIEldNamingPolicy(FIEldNamingPolicy.LOWER_CASE_WITH_UNDERscoreS) .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ") .create();
我最终将在AndroID Retrofit上下文中使用它,以防通过该途径有可用的解决方案.
编辑:根据以下建议,我创建了一个自定义TypeAdapter.我的完整解决方案可以在这里看到:https://gist.github.com/loeschg/2967da6c2029ca215258.
解决方法:
我会那样做:(尽管未测试):
SimpleDateFormat[] formats = new SimpleDateFormat[] { new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"), // Others formats go here};// ...return new GsonBuilder() .registerTypeAdapter(Date.class, new TypeAdapter<Date>() { @OverrIDe public Date read(JsonReader reader) throws IOException { if (reader.peek() == JsonToken.NulL) { reader.nextNull(); return null; } String dateAsstring = reader.nextString(); for (SimpleDateFormat format : formats) { try { return format.parse(dateAsstring); } catch (ParseException e) {} // Ignore that, try next format } // No matching format found! return null; } }) .create();
尝试多种格式的自定义类型适配器.
总结以上是内存溢出为你收集整理的java-在gson / retrofit中,是否有内置方法来处理各种格式的日期?全部内容,希望文章能够帮你解决java-在gson / retrofit中,是否有内置方法来处理各种格式的日期?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)