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