gpt4 book ai didi

java - 在 gson/retrofit 中,是否有内置的方法来处理不同格式的日期?

转载 作者:太空狗 更新时间:2023-10-29 12:40:13 30 4
gpt4 key购买 nike

我当前使用的 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 中,是否有内置的方法来处理不同格式的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27512307/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com