-
Notifications
You must be signed in to change notification settings - Fork 6.5k
/
DateDeserializer.java
executable file
·66 lines (52 loc) · 2.01 KB
/
DateDeserializer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package com.alibaba.fastjson.parser.deserializer;
import java.lang.reflect.Type;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
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);
try {
if (dateLexer.scanISO8601DateIfMatch(false)) {
Calendar calendar = dateLexer.getCalendar();
if (clazz == Calendar.class) {
return (T) calendar;
}
return (T) calendar.getTime();
}
} finally {
dateLexer.close();
}
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;
}
}