From 6f8b4dd818de3a741c8bbb4792268ad388fd1e2c Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 14 Mar 2023 23:02:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DDateUtil=E9=92=88=E5=AF=B9ISO?= =?UTF-8?q?8601=E6=97=B6=E9=97=B4=E6=A0=BC=E5=BC=8F=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=9C=BA=E6=99=AF=E4=B8=8B=E7=9A=84=E8=A7=A3=E6=9E=90=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 ++- .../java/cn/hutool/core/date/DatePattern.java | 12 +++++----- .../cn/hutool/core/date/Issue2981Test.java | 22 +++++++++++++++++++ .../core/date/LocalDateTimeUtilTest.java | 3 ++- 4 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 hutool-core/src/test/java/cn/hutool/core/date/Issue2981Test.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e278aa6e..5c96a209a 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ # 🚀Changelog ------------------------------------------------------------------------------------------------------------- -# 5.8.16.M1 (2023-03-12) +# 5.8.16.M1 (2023-03-14) ### 🐣新特性 * 【core 】 改进Calculator.conversion,兼容乘法符号省略写法(issue#2964@Github) @@ -14,6 +14,7 @@ * 【poi 】 修复SXSSFWorkbook调用setComment时错位的问题(issue#I6MBS5@Gitee) * 【core 】 修复BeanUtil.hasGetter没有跳过getClass方法的问题(issue#I6MBS5@Gitee) * 【core 】 修复FileMagicNumber长度判断问题导致的越界异常(issue#I6MACI@Gitee) +* 【core 】 修复DateUtil针对ISO8601时间格式部分场景下的解析存在问题(issue#2981@Github) ------------------------------------------------------------------------------------------------------------- # 5.8.15 (2023-03-09) 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 3a94d65d5..0a67c8f58 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 @@ -237,22 +237,22 @@ public class DatePattern { public static final FastDateFormat JDK_DATETIME_FORMAT = FastDateFormat.getInstance(JDK_DATETIME_PATTERN, Locale.US); /** - * UTC时间:yyyy-MM-dd'T'HH:mm:ss + * ISO8601时间:yyyy-MM-dd'T'HH:mm:ss */ public static final String UTC_SIMPLE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss"; /** - * UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss + * ISO8601时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss */ - public static final FastDateFormat UTC_SIMPLE_FORMAT = FastDateFormat.getInstance(UTC_SIMPLE_PATTERN, TimeZone.getTimeZone("UTC")); + public static final FastDateFormat UTC_SIMPLE_FORMAT = FastDateFormat.getInstance(UTC_SIMPLE_PATTERN); /** - * UTC时间:yyyy-MM-dd'T'HH:mm:ss.SSS + * ISO8601时间:yyyy-MM-dd'T'HH:mm:ss.SSS */ public static final String UTC_SIMPLE_MS_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS"; /** - * UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss.SSS + * ISO8601时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss.SSS */ - public static final FastDateFormat UTC_SIMPLE_MS_FORMAT = FastDateFormat.getInstance(UTC_SIMPLE_MS_PATTERN, TimeZone.getTimeZone("UTC")); + public static final FastDateFormat UTC_SIMPLE_MS_FORMAT = FastDateFormat.getInstance(UTC_SIMPLE_MS_PATTERN); /** * UTC时间:yyyy-MM-dd'T'HH:mm:ss'Z' diff --git a/hutool-core/src/test/java/cn/hutool/core/date/Issue2981Test.java b/hutool-core/src/test/java/cn/hutool/core/date/Issue2981Test.java new file mode 100644 index 000000000..432459ff0 --- /dev/null +++ b/hutool-core/src/test/java/cn/hutool/core/date/Issue2981Test.java @@ -0,0 +1,22 @@ +package cn.hutool.core.date; + +import org.junit.Assert; +import org.junit.Test; + +public class Issue2981Test { + /** + * https://github.com/dromara/hutool/issues/2981
+ * 按照ISO8601规范,以Z结尾表示UTC时间,否则为当地时间 + */ + @SuppressWarnings("DataFlowIssue") + @Test + public void parseUTCTest() { + final String str1 = "2019-01-01T00:00:00.000Z"; + final String str2 = "2019-01-01T00:00:00.000"; + final String str3 = "2019-01-01 00:00:00.000"; + + Assert.assertEquals(1546300800000L, DateUtil.parse(str1).getTime()); + Assert.assertEquals(1546272000000L, DateUtil.parse(str2).getTime()); + Assert.assertEquals(1546272000000L, DateUtil.parse(str3).getTime()); + } +} diff --git a/hutool-core/src/test/java/cn/hutool/core/date/LocalDateTimeUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/date/LocalDateTimeUtilTest.java index c66296c98..579a7c14a 100755 --- a/hutool-core/src/test/java/cn/hutool/core/date/LocalDateTimeUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/LocalDateTimeUtilTest.java @@ -29,8 +29,9 @@ public class LocalDateTimeUtilTest { Assert.assertNotNull(of); Assert.assertEquals(dateStr, of.toString()); + // 不加Z是标准当地时间,与UTC时间不同 of = LocalDateTimeUtil.ofUTC(dt.getTime()); - Assert.assertEquals(dateStr, of.toString()); + Assert.assertNotEquals(dateStr, of.toString()); } @Test