package com.qianwen.core.tool.convert;
|
|
import com.fasterxml.jackson.core.JsonParser;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.databind.DeserializationContext;
|
import com.fasterxml.jackson.databind.JsonDeserializer;
|
import java.io.IOException;
|
import java.text.DateFormat;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.Date;
|
import java.util.TimeZone;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.time.DateUtils;
|
import com.qianwen.core.tool.utils.Func;
|
import com.qianwen.core.tool.utils.StringPool;
|
|
/*
|
* jackson日期转换器
|
*/
|
public class DateJacksonConverter extends JsonDeserializer<Date> {
|
private static String[] pattern = new String[] {
|
"yyyy-MM-dd", "yyyy-MM-dd HH:mm", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm:ss.S", "yyyy.MM.dd", "yyyy.MM.dd HH:mm", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm:ss.S", "yyyy/MM/dd", "yyyy/MM/dd HH:mm",
|
"yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm:ss.S", "yyyy-MM-dd'T'HH:mm:ss", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" };
|
|
|
public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
|
Date targetDate = null;
|
String originDate = p.getText();
|
if (StringPool.EMPTY.equals(originDate)) {
|
return null;
|
}
|
if (Func.isNotEmpty(originDate)) {
|
try {
|
long longDate = Long.valueOf(originDate.trim()).longValue();
|
targetDate = new Date(longDate);
|
} catch (NumberFormatException e) {
|
try {
|
if (originDate.contains("T")) {
|
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
|
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
|
targetDate = dateFormat.parse(originDate);
|
} else {
|
targetDate = DateUtils.parseDate(originDate, pattern);
|
}
|
} catch (ParseException pe) {
|
throw new IOException(String.format("'%s' can not convert to type 'java.util.Date',just support timestamp(type of long) and following date format(%s)", originDate, StringUtils.join(pattern, StringPool.COMMA)));
|
}
|
}
|
}
|
return targetDate;
|
}
|
|
public Class<?> handledType() {
|
return Date.class;
|
}
|
}
|