2013-10-08 3 views
10

उपयोग करने के लिए मैं अब कि जब मैं gson बताने के लिए मुझे क्या करना दिनांकों पार्स करने के लिए कैसे हैं:कॉन्फ़िगर Gson कई दिनांक स्वरूपों

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

लेकिन मैं यह भी केवल समय के साथ अन्य केवल तारीख के साथ-प्रांगण है, और, और मैं दोनों को तारीख वस्तुओं के रूप में संग्रहीत करना चाहता हूं। मैं यह कैसे कर सकता हूँ?

उत्तर

11

यह कस्टम धारावाहिक/deserializer एकाधिक प्रारूपों को संभाल सकता है। आप पहले एक प्रारूप में पार्सिंग करने का प्रयास कर सकते हैं, फिर यदि यह विफल हो जाता है तो दूसरे प्रारूप के साथ प्रयास करें। यह भी बिना उड़ने के शून्य तारीखों को संभालना चाहिए।

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
GsonBuilder builder = new GsonBuilder(); 
builder.registerTypeAdapter(Date.class, new GsonDateDeSerializer()); 
gson = builder.create(); 

कोड नए GsonDateDeSerializer GSON दिनांक serializer जो

0

@reggoodwin व्यक्तिगत क्षेत्रों के बेहतर नियंत्रण के लिए द्वारा बनाई गई के रूप में बनाया लागू होगी ऊपर, यह एनोटेशन के माध्यम से प्रारूप को नियंत्रित करने के लिए बेहतर हो सकता है:

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