package com.alibaba.fastjson.parser.deserializer; import java.lang.reflect.Type; import java.text.DateFormat; import java.text.ParseException; import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.parser.DefaultJSONParser; import com.alibaba.fastjson.parser.JSONScanner; import com.alibaba.fastjson.parser.JSONToken; public class DateDeserializer extends AbstractDateDeserializer implements ObjectDeserializer { public final static DateDeserializer instance = new DateDeserializer(); @SuppressWarnings("unchecked") protected <T> T cast(DefaultJSONParser parser, Type clazz, Object fieldName, Object val) { if (val == null) { return null; } if (val instanceof java.util.Date) { return (T) val; } else if (val instanceof Number) { return (T) new java.util.Date(((Number) val).longValue()); } else if (val instanceof String) { String strVal = (String) val; if (strVal.length() == 0) { return null; } JSONScanner dateLexer = new JSONScanner(strVal); if (dateLexer.scanISO8601DateIfMatch()) { return (T) dateLexer.getCalendar().getTime(); } DateFormat dateFormat = parser.getDateFormat(); try { return (T) dateFormat.parse(strVal); } catch (ParseException e) { // skip } long longVal = Long.parseLong(strVal); return (T) new java.util.Date(longVal); } throw new JSONException("parse error"); } public int getFastMatchToken() { return JSONToken.LITERAL_INT; } }