diff --git a/CHANGELOG.md b/CHANGELOG.md index e3e704d8d..01ea749c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ * 【setting】 Props异常规则修改(issue#907@Github) * 【setting】 增加GIF支持 * 【core 】 复制创建一个Bean对象, 并忽略某些属性(pr#130@Gitee) +* 【core 】 DateUtil.parse支持更多日期格式(issue#I1KHTB@Gitee) ### Bug修复 * 【json 】 修复append方法导致的JSONConfig传递失效问题(issue#906@Github) diff --git a/hutool-core/pom.xml b/hutool-core/pom.xml index 7107e9773..7a62393b5 100644 --- a/hutool-core/pom.xml +++ b/hutool-core/pom.xml @@ -14,6 +14,6 @@ hutool-core ${project.artifactId} - Hutool核心 + Hutool核心,包括集合、字符串、Bean等工具 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 7cf64cd2f..a773b0e81 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 @@ -17,13 +17,14 @@ public class DatePattern { /** * 标准日期时间正则,每个字段支持单个数字或2个数字,包括: *
+	 *     yyyy-MM-dd HH:mm:ss.SSS
 	 *     yyyy-MM-dd HH:mm:ss
 	 *     yyyy-MM-dd HH:mm
 	 *     yyyy-MM-dd
 	 * 
* @since 5.3.6 */ - public static final Pattern REGEX_NORM = Pattern.compile("\\d{4}-\\d{1,2}-\\d{1,2}( \\d{1,2}:\\d{1,2}(:\\d{1,2})?)?"); + 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})?"); //-------------------------------------------------------------------------------------------------------------------------------- Normal /** 标准日期格式:yyyy-MM-dd */ 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 e2550ca7a..1155ce1eb 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 @@ -35,6 +35,7 @@ import java.util.List; import java.util.Locale; import java.util.TimeZone; import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; /** * 时间工具类 @@ -911,6 +912,7 @@ public class DateUtil extends CalendarUtil { //标准日期格式(包括单个数字的日期时间) dateStr = normalize(dateStr); + final Matcher matcher = DatePattern.REGEX_NORM.matcher(dateStr); if (ReUtil.isMatch(DatePattern.REGEX_NORM, dateStr)) { final int colonCount = StrUtil.count(dateStr, CharUtil.COLON); switch (colonCount) { @@ -921,17 +923,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)){ + // yyyy-MM-dd HH:mm:ss.SSS + return parse(dateStr, DatePattern.NORM_DATETIME_MS_FORMAT); + } // yyyy-MM-dd HH:mm:ss return parse(dateStr, DatePattern.NORM_DATETIME_FORMAT); } } - // 长度判断 - if (length >= DatePattern.NORM_DATETIME_MS_PATTERN.length() - 2) { - //yyyy-MM-dd HH:mm:ss.SSS - return parse(dateStr, DatePattern.NORM_DATETIME_MS_FORMAT); - } - // 没有更多匹配的时间格式 throw new DateException("No format fit for date String [{}] !", dateStr); } 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 f2d1049bf..d4a3e7fd5 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 @@ -779,6 +779,9 @@ public class DateUtilTest { Assert.assertEquals("2020-05-08 03:02:03", dateTime.toString()); dateTime = DateUtil.parse("2020-5-8 3:12:13"); Assert.assertEquals("2020-05-08 03:12:13", dateTime.toString()); + + dateTime = DateUtil.parse("2020-5-8 4:12:26.223"); + Assert.assertEquals("2020-05-08 04:12:26", dateTime.toString()); } @SuppressWarnings("ConstantConditions")