From 5244b7510eb7fd5d6452f133016a26fde4e49be6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9B=98=E5=8F=A4=E7=BB=99=E4=BD=A0=E4=B8=80=E6=96=A7?= <56600535@qq.com> Date: Mon, 28 Jul 2025 23:14:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20yyyy-MM-dd'T'HH:mmXXX=20?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/hutool/core/date/DatePattern.java | 9 +++++++++ .../src/main/java/cn/hutool/core/date/DateUtil.java | 3 +++ .../src/test/java/cn/hutool/core/date/DateUtilTest.java | 6 ++++++ 3 files changed, 18 insertions(+) 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 4e4640040..7c0f24ee5 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 @@ -285,6 +285,15 @@ public class DatePattern { */ public static final FastDateFormat UTC_WITH_XXX_OFFSET_FORMAT = FastDateFormat.getInstance(UTC_WITH_XXX_OFFSET_PATTERN); + /** + * UTC时间:yyyy-MM-dd'T'HH:mmXXX + */ + public static final String UTC_SIMPLE_MINUTE_WITH_XXX_OFFSET_PATTERN = "yyyy-MM-dd'T'HH:mmXXX"; + /** + * UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mmXXX + */ + public static final FastDateFormat UTC_SIMPLE_MINUTE_WITH_XXX_OFFSET_FORMAT = FastDateFormat.getInstance(UTC_SIMPLE_MINUTE_WITH_XXX_OFFSET_PATTERN); + /** * UTC时间:yyyy-MM-dd'T'HH:mm:ss.SSS'Z' */ 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 eb7fcdcfd..ba042718f 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 @@ -901,6 +901,9 @@ public class DateUtil extends CalendarUtil { // 带毫秒,格式类似:2018-09-13T05:34:31.999+08:00 iso8601String = normalizeMillSeconds(iso8601String, ".", "+"); return parse(iso8601String, DatePattern.UTC_MS_WITH_XXX_OFFSET_FORMAT); + } else if (iso8601String.length() == 22 && StrUtil.count(iso8601String, ':') == 2) { + // 精确到分钟,格式类似:2025-07-28T20:00+08:00 + return parse(iso8601String, DatePattern.UTC_SIMPLE_MINUTE_WITH_XXX_OFFSET_FORMAT); } else { // 格式类似:2018-09-13T05:34:31+08:00 return parse(iso8601String, DatePattern.UTC_WITH_XXX_OFFSET_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 2dcfbc6b3..64922020b 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 @@ -667,6 +667,12 @@ public class DateUtilTest { dateStr = dt.toString(simpleDateFormat); assertEquals("2018-09-13 13:34:39.999", dateStr); + dateStr1 = "2025-07-28T20:00+08:00"; + dt = DateUtil.parse(dateStr1); + assert dt != null; + dateStr = dt.toString(); + assertEquals("2025-07-28 20:00:00", dateStr); + // 使用UTC时区 dateStr1 = "2018-09-13T13:34:39.99"; dt = DateUtil.parse(dateStr1);