diff --git a/CHANGELOG.md b/CHANGELOG.md index 4bd7df832..8b788a8dd 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ * 【core 】 list 为空时,CollUtil.max等返回null而非异常(pr#1027@Gitee) * 【poi 】 ExcelReader.getWriter逻辑变更,当从非文件读取时,获取sheet,而非空表格。 * 【core 】 Ipv4Util 新增方法:检测指定 IP 地址是否匹配通配符(pr#3171@Github) +* 【core 】 DateUtil.parse适配6位毫秒格式(issue#I7H34N@Gitee) ### 🐞Bug修复 * 【core 】 修复MapUtil工具使用filter方法构造传入参数结果问题(issue#3162@Github) 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 e7df01330..a29962c3a 100755 --- a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java @@ -856,7 +856,8 @@ public class DateUtil extends CalendarUtil { final int patternLength = DatePattern.UTC_MS_PATTERN.length(); // 格式类似:2018-09-13T05:34:31.999Z,-4表示减去4个单引号的长度 // -4 ~ -6范围表示匹配毫秒1~3位的情况 - if (length <= patternLength - 4 && length >= patternLength - 6) { + if (length <= patternLength && length >= patternLength - 6) { + // issue#I7H34N,支持最多6位毫秒 return parse(utcString, DatePattern.UTC_MS_FORMAT); } } else if (StrUtil.contains(utcString, '+')) { diff --git a/hutool-core/src/main/java/cn/hutool/core/io/FileTypeUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/FileTypeUtil.java index 99decbc7c..99bf5a9c9 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/FileTypeUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/FileTypeUtil.java @@ -78,7 +78,7 @@ public class FileTypeUtil { /** * 根据文件流的头部信息获得文件类型
* 注意此方法会读取头部一些bytes,造成此流接下来读取时缺少部分bytes
- * 因此如果想服用此流,流需支持{@link InputStream#reset()}方法。 + * 因此如果想复用此流,流需支持{@link InputStream#reset()}方法。 * @param in {@link InputStream} * @param isExact 是否精确匹配,如果为false,使用前64个bytes匹配,如果为true,使用前8192bytes匹配 * @return 类型,文件的扩展名,未找到为{@code null} @@ -93,7 +93,7 @@ public class FileTypeUtil { /** * 根据文件流的头部信息获得文件类型
* 注意此方法会读取头部64个bytes,造成此流接下来读取时缺少部分bytes
- * 因此如果想服用此流,流需支持{@link InputStream#reset()}方法。 + * 因此如果想复用此流,流需支持{@link InputStream#reset()}方法。 * @param in {@link InputStream} * @return 类型,文件的扩展名,未找到为{@code null} * @throws IORuntimeException 读取流引起的异常 @@ -105,7 +105,7 @@ public class FileTypeUtil { /** * 根据文件流的头部信息获得文件类型 * 注意此方法会读取头部64个bytes,造成此流接下来读取时缺少部分bytes
- * 因此如果想服用此流,流需支持{@link InputStream#reset()}方法。 + * 因此如果想复用此流,流需支持{@link InputStream#reset()}方法。 * *
 	 *     1、无法识别类型默认按照扩展名识别
@@ -125,7 +125,7 @@ public class FileTypeUtil {
 	/**
 	 * 根据文件流的头部信息获得文件类型
 	 * 注意此方法会读取头部一些bytes,造成此流接下来读取时缺少部分bytes
- * 因此如果想服用此流,流需支持{@link InputStream#reset()}方法。 + * 因此如果想复用此流,流需支持{@link InputStream#reset()}方法。 * *
 	 *     1、无法识别类型默认按照扩展名识别
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 b3ac6393b..271590442 100755
--- a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java
@@ -1148,4 +1148,11 @@ public class DateUtilTest {
 		final Calendar c = DateUtil.calendar(date);
 		Assert.assertEquals(DateUtil.date(c), date);
 	}
+
+	@Test
+	public void issueI7H34NTest() {
+		final DateTime parse = DateUtil.parse("2019-10-22T09:56:03.000123Z");
+		Assert.assertNotNull(parse);
+		Assert.assertEquals("2019-10-22 09:56:03", parse.toString());
+	}
 }
diff --git a/hutool-json/src/test/java/cn/hutool/json/IssueI7GPGXTest.java b/hutool-json/src/test/java/cn/hutool/json/IssueI7GPGXTest.java
new file mode 100755
index 000000000..9056df589
--- /dev/null
+++ b/hutool-json/src/test/java/cn/hutool/json/IssueI7GPGXTest.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2023 looly(loolly@aliyun.com)
+ * Hutool is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ *          http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+
+package cn.hutool.json;
+
+import cn.hutool.core.lang.Pair;
+import cn.hutool.core.lang.TypeReference;
+import org.junit.Test;
+
+public class IssueI7GPGXTest {
+	@Test
+	public void toBeanTest() throws NoSuchMethodException {
+		Pair hutoolPair = getHutoolPair();
+		String a = JSONUtil.toJsonStr(hutoolPair);
+		System.out.println(a);
+		System.out.println("=====================================");
+		Pair pair = JSONUtil.toBean(a, new TypeReference>() {}, false);
+		System.out.println(JSONUtil.toJsonStr(pair));
+	}
+
+	public static Pair getHutoolPair() {
+		return new Pair<>("test1", true);
+	}
+}