1、DateUtil yyyy-MM-dd HH:mm:ss.SSSSSS 格式支持

2、DateConverter 增加验证, 入参是 空串,返回null, 而不是抛异常; (生产环境会出现 空串的情况; 异常交给调用者自行抛出)
This commit is contained in:
duandazhi 2021-08-19 16:17:20 +08:00
parent dbc4fd62ce
commit c92ccb7316
4 changed files with 47 additions and 4 deletions

View File

@ -62,6 +62,9 @@ public class DateConverter extends AbstractConverter<java.util.Date> {
@Override
protected java.util.Date convertInternal(Object value) {
if (value == null || (value instanceof CharSequence && StrUtil.isBlank(value.toString()))) {
return null;
}
if (value instanceof TemporalAccessor) {
return wrap(DateUtil.date((TemporalAccessor) value));
} else if (value instanceof Calendar) {

View File

@ -18,6 +18,7 @@ public class DatePattern {
/**
* 标准日期时间正则每个字段支持单个数字或2个数字包括
* <pre>
* yyyy-MM-dd HH:mm:ss.SSSSSS
* yyyy-MM-dd HH:mm:ss.SSS
* yyyy-MM-dd HH:mm:ss
* yyyy-MM-dd HH:mm
@ -26,7 +27,7 @@ public class DatePattern {
*
* @since 5.3.6
*/
public static final Pattern REGEX_NORM = Pattern.compile("\\d{4}-\\d{1,2}-\\d{1,2}(\\s\\d{1,2}:\\d{1,2}(:\\d{1,2})?)?(.\\d{1,3})?");
public static final Pattern REGEX_NORM = Pattern.compile("\\d{4}-\\d{1,2}-\\d{1,2}(\\s\\d{1,2}:\\d{1,2}(:\\d{1,2})?)?(.\\d{1,6})?");
//-------------------------------------------------------------------------------------------------------------------------------- Normal
/**
@ -120,6 +121,19 @@ public class DatePattern {
*/
public static final DateTimeFormatter NORM_DATETIME_MS_FORMATTER = createFormatter(NORM_DATETIME_MS_PATTERN);
/**
* 标准日期时间格式精确到毫秒yyyy-MM-dd HH:mm:ss.SSSSSS
*/
public static final String NORM_DATETIME_MS_FULL_PATTERN = "yyyy-MM-dd HH:mm:ss.SSSSSS";
/**
* 标准日期时间格式精确到毫秒 {@link FastDateFormat}yyyy-MM-dd HH:mm:ss.SSSSSS
*/
public static final FastDateFormat NORM_DATETIME_MS_FULL_FORMAT = FastDateFormat.getInstance(NORM_DATETIME_MS_PATTERN);
/**
* 标准日期时间格式精确到毫秒 {@link FastDateFormat}yyyy-MM-dd HH:mm:ss.SSSSSS
*/
public static final DateTimeFormatter NORM_DATETIME_MS_FULL_FORMATTER = createFormatter(NORM_DATETIME_MS_PATTERN);
/**
* ISO8601日期时间格式精确到毫秒yyyy-MM-dd HH:mm:ss,SSS
*/

View File

@ -899,6 +899,7 @@ public class DateUtil extends CalendarUtil {
* <li>HH时mm分ss秒</li>
* <li>yyyy-MM-dd HH:mm</li>
* <li>yyyy-MM-dd HH:mm:ss.SSS</li>
* <li>yyyy-MM-dd HH:mm:ss.SSSSSS</li>
* <li>yyyyMMddHHmmss</li>
* <li>yyyyMMddHHmmssSSS</li>
* <li>yyyyMMdd</li>
@ -928,7 +929,7 @@ public class DateUtil extends CalendarUtil {
return parse(dateStr, DatePattern.PURE_DATETIME_FORMAT);
} else if (length == DatePattern.PURE_DATETIME_MS_PATTERN.length()) {
return parse(dateStr, DatePattern.PURE_DATETIME_MS_FORMAT);
} else if (length == DatePattern.PURE_DATE_PATTERN.length()) {
}else if (length == DatePattern.PURE_DATE_PATTERN.length()) {
return parse(dateStr, DatePattern.PURE_DATE_FORMAT);
} else if (length == DatePattern.PURE_TIME_PATTERN.length()) {
return parse(dateStr, DatePattern.PURE_TIME_FORMAT);
@ -960,8 +961,13 @@ public class DateUtil extends CalendarUtil {
return parse(dateStr, DatePattern.NORM_DATETIME_MINUTE_FORMAT);
case 2:
if (StrUtil.contains(dateStr, CharUtil.DOT)) {
// yyyy-MM-dd HH:mm:ss.SSS
return parse(dateStr, DatePattern.NORM_DATETIME_MS_FORMAT);
if (dateStr.length() == DatePattern.NORM_DATETIME_MS_PATTERN.length()) {
// yyyy-MM-dd HH:mm:ss.SSS
return parse(dateStr, DatePattern.NORM_DATETIME_MS_FORMAT);
} else {
// yyyy-MM-dd HH:mm:ss.SSSSSS
return parse(dateStr, DatePattern.NORM_DATETIME_MS_FULL_FORMAT);
}
}
// yyyy-MM-dd HH:mm:ss
return parse(dateStr, DatePattern.NORM_DATETIME_FORMAT);

View File

@ -456,6 +456,26 @@ public class DateUtilTest {
Assert.assertEquals("2020-06-28 02:14:13", dateTime.toString());
}
/**
* 测试支持yyyy-MM-dd HH:mm:ss.SSSSSS 格式
*/
@Test
public void parseTest9() {
String str = "2020-02-06 01:58:00.000020";
DateTime dateTime = DateUtil.parse(str);
assert dateTime != null;
}
/**
* 测试字符串是空返回null, 而不是直接报错
*/
@Test
public void parseTest10() {
String str = "";
DateTime dateTime = DateUtil.parse(str);
Assert.assertNull(dateTime);
}
@Test
public void parseUTCOffsetTest() {
// issue#I437AP@Gitee