import java.time.DateTimeException;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import org.aurochsframework.boot.core.exceptions.DateTimeParseException;
import org.springframework.util.StringUtils;
public class DatePatternTransUtils {
private static List<String> patterns = new ArrayList();
public DatePatternTransUtils() {
}
public static Date dateHandle(String dataStr) {
Iterator var1 = patterns.iterator();
while(var1.hasNext()) {
String pattern = (String)var1.next();
try {
return dateHandle(pattern, dataStr);
} catch (DateTimeException var4) {
}
}
throw new DateTimeParseException("解析时间字符串错误:" + dataStr);
}
public static Date dateHandle(String pattern, String dataStr) {
if (StringUtils.isEmpty(dataStr)) {
return null;
} else {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern, Locale.US);
LocalDateTime parse = LocalDateTime.parse(dataStr, dtf);
return dateTimeTrans(parse);
}
}
public static Date dateTimeTrans(LocalDateTime localDateTime) {
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = localDateTime.atZone(zoneId);
return Date.from(zdt.toInstant());
}
static {
patterns.add("yyyy-MM-dd HH:mm:ss");
patterns.add("yyyy-MM-dd");
patterns.add("yyyy/MM/dd");
patterns.add("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
patterns.add("EEE MMM dd HH:mm:ss z yyyy");
}
}
配置@JsonComponent与JsonDeserializer可实现,web中接口可接收多种格式的时间字符串并将其转成Date
@JsonComponent
public class GlobalDateDeserializer extends JsonDeserializer<Date> {
public GlobalDateDeserializer() {
}
public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
return DatePatternTransUtils.dateHandle(jsonParser.getText());
}
}