configurationGson使用多种date格式

我现在当我想告诉gson如何parsingdate时,我会这样做:

Gson gson= new GsonBuilder().setDateFormat("yyyy-MM-dd hh:mm").create(); 

但是我也只有date的字段,其他字段只有时间,我希望两者都被存储为Date对象。 我怎样才能做到这一点?

Solutions Collecting From Web of "configurationGson使用多种date格式"

这个定制的串行器/解串器可以处理多种格式。 您可以先尝试以一种格式parsing,然后如果失败,则尝试使用另一种格式。 这也应该处理空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; } } } 

希望对你的项目有所帮助,祝你好运。

 GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(Date.class, new GsonDateDeSerializer()); gson = builder.create(); 

上面的代码将把新创build的GsonDateDeSerializer应用为由@reggoodwin创build的GSON Date序列化程序

为了更好地控制单个字段,最好通过注释来控制格式:

 @JsonAdapter(value = MyDateTypeAdapter.class) private Date dateField; 

…沿着这些线的types适配器:

 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)... } }