PageRenderTime 246ms CodeModel.GetById 98ms app.highlight 13ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/java/com/alibaba/fastjson/parser/deserializer/SqlDateDeserializer.java

https://bitbucket.org/xiejuntao/xdesktop
Java | 61 lines | 48 code | 12 blank | 1 comment | 12 complexity | 717323632c0035698ef52d8e1a575c22 MD5 | raw file
 1package com.alibaba.fastjson.parser.deserializer;
 2
 3import java.lang.reflect.Type;
 4import java.text.DateFormat;
 5import java.text.ParseException;
 6import java.util.Date;
 7
 8import com.alibaba.fastjson.JSONException;
 9import com.alibaba.fastjson.parser.DefaultJSONParser;
10import com.alibaba.fastjson.parser.JSONScanner;
11import com.alibaba.fastjson.parser.JSONToken;
12
13public class SqlDateDeserializer extends AbstractDateDeserializer implements ObjectDeserializer {
14
15    public final static SqlDateDeserializer instance = new SqlDateDeserializer();
16
17    @SuppressWarnings("unchecked")
18    protected <T> T cast(DefaultJSONParser parser, Type clazz, Object fieldName, Object val) {
19        if (val == null) {
20            return null;
21        }
22
23        if (val instanceof java.util.Date) {
24            val = new java.sql.Date(((Date) val).getTime());
25        } else if (val instanceof Number) {
26            val = (T) new java.sql.Date(((Number) val).longValue());
27        } else if (val instanceof String) {
28            String strVal = (String) val;
29            if (strVal.length() == 0) {
30                return null;
31            }
32
33            long longVal;
34
35            JSONScanner dateLexer = new JSONScanner(strVal);
36            if (dateLexer.scanISO8601DateIfMatch()) {
37                longVal = dateLexer.getCalendar().getTimeInMillis();
38            } else {
39
40                DateFormat dateFormat = parser.getDateFormat();
41                try {
42                    java.util.Date date = (java.util.Date) dateFormat.parse(strVal);
43                    return (T) new java.sql.Date(date.getTime());
44                } catch (ParseException e) {
45                    // skip
46                }
47
48                longVal = Long.parseLong(strVal);
49            }
50            return (T) new java.sql.Date(longVal);
51        } else {
52            throw new JSONException("parse error : " + val);
53        }
54
55        return (T) val;
56    }
57
58    public int getFastMatchToken() {
59        return JSONToken.LITERAL_INT;
60    }
61}