From eba3332eaf03e9f8d0f4d3bd6c73eae51f7ffc4e Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 15 Sep 2022 17:06:00 +0800 Subject: [PATCH] fix #2612 --- .../java/cn/hutool/core/date/DatePattern.java | 2 ++ .../core/date/format/parser/UTCDateParser.java | 18 ++++++++++++++++++ .../cn/hutool/core/date/Issue2612Test.java | 18 ++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 hutool-core/src/test/java/cn/hutool/core/date/Issue2612Test.java 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 f1c972a9a..108179a71 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 @@ -67,6 +67,8 @@ import java.util.regex.Pattern; *
  • 2022-08-23T15:20:46Z
  • * * + * 其他格式见:https://ijmacd.github.io/rfc3339-iso8601/ + * * @author Looly */ public class DatePattern { diff --git a/hutool-core/src/main/java/cn/hutool/core/date/format/parser/UTCDateParser.java b/hutool-core/src/main/java/cn/hutool/core/date/format/parser/UTCDateParser.java index c14812701..76edffa21 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/format/parser/UTCDateParser.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/format/parser/UTCDateParser.java @@ -4,6 +4,7 @@ import cn.hutool.core.date.DateException; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.format.DefaultDateBasic; +import cn.hutool.core.regex.ReUtil; import cn.hutool.core.text.StrUtil; import cn.hutool.core.util.CharUtil; @@ -22,6 +23,7 @@ import cn.hutool.core.util.CharUtil; * @since 6.0.0 */ public class UTCDateParser extends DefaultDateBasic implements DateParser { + private static final long serialVersionUID = 1L; public static UTCDateParser INSTANCE = new UTCDateParser(); @@ -60,6 +62,22 @@ public class UTCDateParser extends DefaultDateBasic implements DateParser { // 格式类似:2018-09-13T05:34:31+08:00 return new DateTime(source, DatePattern.UTC_WITH_XXX_OFFSET_FORMAT); } + } else if(ReUtil.contains("-\\d{2}:?00", source)){ + // Issue#2612,类似 2022-09-14T23:59:00-08:00 或者 2022-09-14T23:59:00-0800 + + // 去除类似2019-06-01T19:45:43 -08:00加号前的空格 + source = source.replace(" -", "-"); + if(':' != source.charAt(source.length() - 3)){ + source = source.substring(0, source.length() - 2) + ":00"; + } + + if (StrUtil.contains(source, CharUtil.DOT)) { + // 带毫秒,格式类似:2018-09-13T05:34:31.999-08:00 + return new DateTime(source, DatePattern.UTC_MS_WITH_XXX_OFFSET_FORMAT); + } else { + // 格式类似:2018-09-13T05:34:31-08:00 + return new DateTime(source, DatePattern.UTC_WITH_XXX_OFFSET_FORMAT); + } } else { if (length == DatePattern.UTC_SIMPLE_PATTERN.length() - 2) { // 格式类似:2018-09-13T05:34:31 diff --git a/hutool-core/src/test/java/cn/hutool/core/date/Issue2612Test.java b/hutool-core/src/test/java/cn/hutool/core/date/Issue2612Test.java new file mode 100644 index 000000000..9f285eb00 --- /dev/null +++ b/hutool-core/src/test/java/cn/hutool/core/date/Issue2612Test.java @@ -0,0 +1,18 @@ +package cn.hutool.core.date; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.Objects; + +public class Issue2612Test { + + @Test + public void parseTest(){ + Assert.assertEquals("2022-09-14 23:59:00", + Objects.requireNonNull(DateUtil.parse("2022-09-14T23:59:00-08:00")).toString()); + + Assert.assertEquals("2022-09-14 23:59:00", + Objects.requireNonNull(DateUtil.parse("2022-09-14T23:59:00-0800")).toString()); + } +}