package com.corp.api.common.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Pattern;
import java.util.stream.Stream;
public class DateFormatUtils {
private static class DatePatternTuple {
private final Pattern pattern;
private final String datePattern;
DatePatternTuple(final String pattern, final String datePattern) {
this.pattern = Pattern.compile(pattern);
this.datePattern = datePattern;
}
boolean matches(String candidate) {
return pattern.matcher(candidate).matches();
}
SimpleDateFormat dateFormat() {
return new SimpleDateFormat(datePattern);
}
}
private static final DatePatternTuple[] DATE_PATTERN_TUPLES = {
new DatePatternTuple("\d{4}/\d{1,2}/\d{1,2} \d{2}:\d{2}:\d{2}", "yyyy/MM/dd HH:mm:ss"),
new DatePatternTuple("\d{4}/\d{1,2}/\d{1,2}", "yyyy/MM/dd"),
new DatePatternTuple("\d{4}-\d{1,2}-\d{1,2} \d{2}:\d{2}:\d{2}", "yyyy-MM-dd HH:mm:ss"),
new DatePatternTuple("\d{4}-\d{1,2}-\d{1,2}", "yyyy-MM-dd"),
new DatePatternTuple("\d{4}年\d{1,2}月\d{1,2}日\d{2}时\d{2}分\d{2}秒", "yyyy年MM月dd日HH时mm分ss秒"),
new DatePatternTuple("\d{1,2}/\d{1,2}/\d{4} \d{2}:\d{2}:\d{2}", "dd/MM/yyyy HH:mm:ss"),
new DatePatternTuple("\w{3,4} \d{2} \d{2}:\d{2}:\d{2} \d{4}", " MMM dd HH:mm:ss yyyy")
};
public static Date freeFormatDateParser(String dateStr) {
return Stream.of(DATE_PATTERN_TUPLES)
.filter(t -> t.matches(dateStr))
.map(DatePatternTuple::dateFormat)
.filter(t -> matches(t, dateStr))
.map(t -> parse(t, dateStr))
.findFirst()
.orElse(null);
}
private static boolean matches(SimpleDateFormat dateFormat, String dateStr) {
try {
dateFormat.parse(dateStr);
return true;
} catch (ParseException e) {
return false;
}
}
private static Date parse(SimpleDateFormat dateFormat, String dateStr) {
try {
return dateFormat.parse(dateStr);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
DateFormatUtils.freeFormatDateParser(detailInfo.getRealValue())//转为标准Date 格式



