我現在,當我想告訴GSON如何解析日期我做的:配置GSON使用多種日期格式
Gson gson= new GsonBuilder().setDateFormat("yyyy-MM-dd hh:mm").create();
但我也只用日期字段,並只用一次別人,我希望兩者都被存儲爲Date對象。我怎樣才能做到這一點?
我現在,當我想告訴GSON如何解析日期我做的:配置GSON使用多種日期格式
Gson gson= new GsonBuilder().setDateFormat("yyyy-MM-dd hh:mm").create();
但我也只用日期字段,並只用一次別人,我希望兩者都被存儲爲Date對象。我怎樣才能做到這一點?
此自定義序列化器/解串器可以處理多種格式。 您可以先嚐試以一種格式解析,然後如果失敗,則嘗試第二種格式。 這也應該處理空日期而不會炸燬。
public class GsonDateDeSerializer implements JsonDeserializer<Date> {
...
private SimpleDateFormat format1 = new SimpleDateFormat("MMM dd, yyyy hh:mm:ss a");
private SimpleDateFormat format2 = new SimpleDateFormat("HH:mm:ss");
...
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
String j = json.getAsJsonPrimitive().getAsString();
return parseDate(j);
} catch (ParseException e) {
throw new JsonParseException(e.getMessage(), e);
}
}
private Date parseDate(String dateString) throws ParseException {
if (dateString != null && dateString.trim().length() > 0) {
try {
return format1.parse(dateString);
} catch (ParseException pe) {
return format2.parse(dateString);
}
} else {
return null;
}
}
}
希望對你的項目有所幫助,祝你好運。
上面的代碼將應用創建GsonDateDeSerializer作爲通過@reggoodwin
對於各個字段的更精細的控制創建GSON日期串行新,可優選通過註解來控制格式:
@JsonAdapter(value = MyDateTypeAdapter.class)
private Date dateField;
...沿着這些線路與類型適配器:
public class MyDateTypeAdapter extends TypeAdapter<Date> {
@Override
public Date read(JsonReader in) throws IOException {
// If in.peek isn't JsonToken.NULL, parse in.nextString()() appropriately
// and return the Date...
}
@Override
public void write(JsonWriter writer, Date value) throws IOException {
// Set writer.value appropriately from value.get() (if not null)...
}
}