7
如果数据中有这样格式的时间数据,反序列化的时候框架会抛出NumberFormatException。简单看了一下源码好像是里面判断时间的时候有点问题
if ("0000-00-00".equals(strVal)
|| "0000-00-00T00:00:00".equalsIgnoreCase(strVal)
|| "0001-01-01T00:00:00+08:00".equalsIgnoreCase(strVal)) {
return null;
}
int index = strVal.lastIndexOf('|');
if (index > 20) {
String tzStr = strVal.substring(index + 1);
TimeZone timeZone = TimeZone.getTimeZone(tzStr);
if (!"GMT".equals(timeZone.getID())) {
String subStr = strVal.substring(0, index);
JSONScanner dateLexer = new JSONScanner(subStr);
try {
if (dateLexer.scanISO8601DateIfMatch(false)) {
Calendar calendar = dateLexer.getCalendar();
calendar.setTimeZone(timeZone);
if (clazz == Calendar.class) {
return (T) calendar;
}
return (T) calendar.getTime();
}
} finally {
dateLexer.close();
}
}
}
// 2017-08-14 19:05:30.000|America/Los_Angeles
//
long longVal = Long.parseLong(strVal);
return (T) new java.util.Date(longVal);
判断没有包含这种0001-01-01T00:00:00格式的特殊时间数据类型