diff --git a/hutool-core/src/main/java/cn/hutool/core/date/DatePattern.java b/hutool-core/src/main/java/cn/hutool/core/date/DatePattern.java index bbced88d7..7a98e9421 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/DatePattern.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DatePattern.java @@ -121,19 +121,6 @@ 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 */ diff --git a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java index ea6a4e6c9..36bb5b146 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java @@ -960,14 +960,15 @@ public class DateUtil extends CalendarUtil { // yyyy-MM-dd HH:mm return parse(dateStr, DatePattern.NORM_DATETIME_MINUTE_FORMAT); case 2: - if (StrUtil.contains(dateStr, CharUtil.DOT)) { - 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); + final int indexOfDot = StrUtil.indexOf(dateStr, CharUtil.DOT); + if (indexOfDot > 0) { + final int length1 = dateStr.length(); + // yyyy-MM-dd HH:mm:ss.SSS 或者 yyyy-MM-dd HH:mm:ss.SSSSSS + if(length1 - indexOfDot > 4) { + // 类似yyyy-MM-dd HH:mm:ss.SSSSSS,采取截断操作 + dateStr = StrUtil.subPre(dateStr, indexOfDot + 4); } + return parse(dateStr, DatePattern.NORM_DATETIME_MS_FORMAT); } // yyyy-MM-dd HH:mm:ss return parse(dateStr, DatePattern.NORM_DATETIME_FORMAT); diff --git a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java index 515a0ede4..c1fdaba0c 100644 --- a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java @@ -460,18 +460,34 @@ public class DateUtilTest { * 测试支持:yyyy-MM-dd HH:mm:ss.SSSSSS 格式 */ @Test - public void parseTest9() { + public void parseNormFullTest() { String str = "2020-02-06 01:58:00.000020"; DateTime dateTime = DateUtil.parse(str); - assert dateTime != null; + Assert.assertNotNull(dateTime); + Assert.assertEquals("2020-02-06 01:58:00.000", dateTime.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); + + str = "2020-02-06 01:58:00.00002"; + dateTime = DateUtil.parse(str); + Assert.assertNotNull(dateTime); + Assert.assertEquals("2020-02-06 01:58:00.000", dateTime.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); + + str = "2020-02-06 01:58:00.111000"; + dateTime = DateUtil.parse(str); + Assert.assertNotNull(dateTime); + Assert.assertEquals("2020-02-06 01:58:00.111", dateTime.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); + + str = "2020-02-06 01:58:00.111"; + dateTime = DateUtil.parse(str); + Assert.assertNotNull(dateTime); + Assert.assertEquals("2020-02-06 01:58:00.111", dateTime.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); } /** * 测试字符串是空,返回null, 而不是直接报错; */ @Test - public void parseTest10() { - String str = ""; + public void parseEmptyTest() { + String str = " "; DateTime dateTime = DateUtil.parse(str); Assert.assertNull(dateTime); }