2013-10-08 31 views
10

我現在,當我想告訴GSON如何解析日期我做的:配置GSON使用多種日期格式

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

但我也只用日期字段,並只用一次別人,我希望兩者都被存儲爲Date對象。我怎樣才能做到這一點?

回答

11

此自定義序列化器/解串器可以處理多種格式。 您可以先嚐試以一種格式解析,然後如果失敗,則嘗試第二種格式。 這也應該處理空日期而不會炸燬。

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; 
    } 
} 

} 

希望對你的項目有所幫助,祝你好運。

4
​​

上面的代碼將應用創建GsonDateDeSerializer作爲通過@reggoodwin

0

對於各個字段的更精細的控制創建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)... 
    } 
} 
相關問題