现在,我想告诉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;
    }
}

}

希望对您有所帮助,祝您的项目顺利。

10-06 05:16
查看更多