diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3b2d8b479..377f7e4ce 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,6 +12,7 @@
* 【core 】 FileUtil和PathUtil增加Resource重载(issue#I97FJT@Gitee)
* 【core 】 优化ThreadUtil.safeSleep,使用System.nanoTime()(issue#I9BMGK@Gitee)
* 【db 】 新增数据库Wrapper支持反解(pr#1192@Gitee)
+* 【core 】 新增RFC2822日期格式解析支持(issue#I9C2D4@Gitee)
### 🐞Bug修复
* 【core 】 修复PathMover对目标已存在且只读文件报错错误问题(issue#I95CLT@Gitee)
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 a499c9e7d..4e4640040 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
@@ -226,6 +226,10 @@ public class DatePattern {
* HTTP头中日期时间格式 {@link FastDateFormat}:EEE, dd MMM yyyy HH:mm:ss z
*/
public static final FastDateFormat HTTP_DATETIME_FORMAT = FastDateFormat.getInstance(HTTP_DATETIME_PATTERN, TimeZone.getTimeZone("GMT"), Locale.US);
+ /**
+ * HTTP头中日期时间格式 {@link FastDateFormat}:EEE, dd MMM yyyy HH:mm:ss z
+ */
+ public static final FastDateFormat HTTP_DATETIME_FORMAT_Z = FastDateFormat.getInstance(HTTP_DATETIME_PATTERN, Locale.US);
/**
* JDK中日期时间格式:EEE MMM dd HH:mm:ss zzz yyyy
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 d20b8881d..0abdef071 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
@@ -927,24 +927,40 @@ public class DateUtil extends CalendarUtil {
* @param cstString UTC时间
* @return 日期对象
* @since 4.6.9
+ * @deprecated 理解错误,请使用{@link #parseRFC2822(CharSequence)}
*/
+ @Deprecated
public static DateTime parseCST(CharSequence cstString) {
- if (cstString == null) {
+ return parseRFC2822(cstString);
+ }
+
+ /**
+ * 解析RFC2822时间,格式:
+ *
+ * - EEE MMM dd HH:mm:ss z yyyy(例如:Wed Aug 01 00:00:00 CST 2012)
+ *
+ *
+ * @param source RFC2822时间
+ * @return 日期对象
+ * @since 4.6.9
+ */
+ public static DateTime parseRFC2822(CharSequence source) {
+ if (source == null) {
return null;
}
// issue#I9C2D4
- if(StrUtil.contains(cstString, ',')){
- if(StrUtil.contains(cstString, "星期")){
- return parse(cstString, FastDateFormat.getInstance(DatePattern.HTTP_DATETIME_PATTERN, TimeZone.getTimeZone("GMT"), Locale.CHINA));
+ if(StrUtil.contains(source, ',')){
+ if(StrUtil.contains(source, "星期")){
+ return parse(source, FastDateFormat.getInstance(DatePattern.HTTP_DATETIME_PATTERN, Locale.CHINA));
}
- return parse(cstString, DatePattern.HTTP_DATETIME_FORMAT);
+ return parse(source, DatePattern.HTTP_DATETIME_FORMAT_Z);
}
- if(StrUtil.contains(cstString, "星期")){
- return parse(cstString, FastDateFormat.getInstance(DatePattern.JDK_DATETIME_PATTERN, TimeZone.getTimeZone("GMT"), Locale.CHINA));
+ if(StrUtil.contains(source, "星期")){
+ return parse(source, FastDateFormat.getInstance(DatePattern.JDK_DATETIME_PATTERN, Locale.CHINA));
}
- return parse(cstString, DatePattern.JDK_DATETIME_FORMAT);
+ return parse(source, DatePattern.JDK_DATETIME_FORMAT);
}
/**
@@ -1007,7 +1023,7 @@ public class DateUtil extends CalendarUtil {
// Tue Jun 4 16:25:15 +0800 2019
// Thu May 16 17:57:18 GMT+08:00 2019
// Wed Aug 01 00:00:00 CST 2012
- return parseCST(dateStr);
+ return parseRFC2822(dateStr);
} else if (StrUtil.contains(dateStr, 'T')) {
// UTC时间
return parseUTC(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 02c72ae41..1f75a082c 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
@@ -705,7 +705,7 @@ public class DateUtilTest {
}
@Test
- public void parseCSTTest() {
+ public void parseRFC2822Test() {
final String dateStr = "Wed Sep 16 11:26:23 CST 2009";
final SimpleDateFormat sdf = new SimpleDateFormat(DatePattern.JDK_DATETIME_PATTERN, Locale.US);
@@ -713,7 +713,7 @@ public class DateUtilTest {
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
final DateTime parse = DateUtil.parse(dateStr, sdf);
- DateTime dateTime = DateUtil.parseCST(dateStr);
+ DateTime dateTime = DateUtil.parseRFC2822(dateStr);
Assert.assertEquals(parse, dateTime);
dateTime = DateUtil.parse(dateStr);