gpt4 book ai didi

java - 改造 GSON 将日期从 json 字符串序列化为 long 或 java.lang.Long

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:06:22 25 4
gpt4 key购买 nike

我正在使用 Retrofit 库进行 REST 调用。传入的 JSON 如下所示。

{
"created_at": "2013-07-16T22:52:36Z",
}

我如何告诉 Retrofit 或 Gson 将其转换为 long

最佳答案

您可以通过在 retrofit 实例上使用您自己的 Gson 对象设置自定义 GsonConverter 轻松地做到这一点。在您的 POJO 中,您可以 Date created_at; 而不是 long 或 String。从日期对象中,您可以使用 created_at.getTime() 在必要时获取时间。

Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ssz")
.create();

RestAdapter.Builder builder = new RestAdapter.Builder();
// Use a custom GSON converter
builder.setConverter(new GsonConverter(gson));
..... create retrofit service.

您还可以通过在改造使用的 gson 实例上注册自定义 JsonDeserializer 来支持多种日期字符串格式

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateTypeDeserializer());

public class DateTypeDeserializer implements JsonDeserializer<Date> {
private static final String[] DATE_FORMATS = new String[]{
"yyyy-MM-dd'T'HH:mm:ssZ",
"yyyy-MM-dd'T'HH:mm:ss",
"yyyy-MM-dd",
"EEE MMM dd HH:mm:ss z yyyy",
"HH:mm:ss",
"MM/dd/yyyy HH:mm:ss aaa",
"yyyy-MM-dd'T'HH:mm:ss.SSSSSS",
"yyyy-MM-dd'T'HH:mm:ss.SSSSSSS",
"yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'",
"MMM d',' yyyy H:mm:ss a"
};

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

关于java - 改造 GSON 将日期从 json 字符串序列化为 long 或 java.lang.Long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28540224/

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