我目前使用的回复日期(为了这个问题,日期和日期时间是相同的)以" 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。
答案 0 :(得分:3)
我会这样做:(虽然未经测试):
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();
尝试多种格式的自定义类型适配器。