mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
1、DateUtil yyyy-MM-dd HH:mm:ss.SSSSSS 格式支持
2、DateConverter 增加验证, 入参是 空串,返回null, 而不是抛异常; (生产环境会出现 空串的情况; 异常交给调用者自行抛出)
This commit is contained in:
parent
dbc4fd62ce
commit
c92ccb7316
@ -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) {
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user