package com.alibaba.fastjson.parser.deserializer;
import java.lang.reflect.Type;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.parser.DefaultJSONParser;
import com.alibaba.fastjson.parser.JSONToken;
public class TimestampDeserializer extends AbstractDateDeserializer implements ObjectDeserializer {
public final static TimestampDeserializer instance = new TimestampDeserializer();
@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) new java.sql.Timestamp(((Date) val).getTime());
}
if (val instanceof Number) {
return (T) new java.sql.Timestamp(((Number) val).longValue());
}
if (val instanceof String) {
String strVal = (String) val;
if (strVal.length() == 0) {
return null;
}
DateFormat dateFormat = parser.getDateFormat();
try {
Date date = (Date) dateFormat.parse(strVal);
return (T) new Timestamp(date.getTime());
} catch (ParseException e) {
// skip
}
long longVal = Long.parseLong(strVal);
return (T) new java.sql.Timestamp(longVal);
}
throw new JSONException("parse error");
}
public int getFastMatchToken() {
return JSONToken.LITERAL_INT;
}
}