新增RFC2822日期格式解析支持

This commit is contained in:
Looly 2024-03-28 23:19:17 +08:00
parent 94b28801a3
commit 339b8869ad
4 changed files with 32 additions and 11 deletions

View File

@ -12,6 +12,7 @@
* 【core 】 FileUtil和PathUtil增加Resource重载issue#I97FJT@Gitee * 【core 】 FileUtil和PathUtil增加Resource重载issue#I97FJT@Gitee
* 【core 】 优化ThreadUtil.safeSleep使用System.nanoTime()issue#I9BMGK@Gitee * 【core 】 优化ThreadUtil.safeSleep使用System.nanoTime()issue#I9BMGK@Gitee
* 【db 】 新增数据库Wrapper支持反解pr#1192@Gitee * 【db 】 新增数据库Wrapper支持反解pr#1192@Gitee
* 【core 】 新增RFC2822日期格式解析支持issue#I9C2D4@Gitee
### 🐞Bug修复 ### 🐞Bug修复
* 【core 】 修复PathMover对目标已存在且只读文件报错错误问题issue#I95CLT@Gitee * 【core 】 修复PathMover对目标已存在且只读文件报错错误问题issue#I95CLT@Gitee

View File

@ -226,6 +226,10 @@ public class DatePattern {
* HTTP头中日期时间格式 {@link FastDateFormat}EEE, dd MMM yyyy HH:mm:ss z * 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); 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 * JDK中日期时间格式EEE MMM dd HH:mm:ss zzz yyyy

View File

@ -927,24 +927,40 @@ public class DateUtil extends CalendarUtil {
* @param cstString UTC时间 * @param cstString UTC时间
* @return 日期对象 * @return 日期对象
* @since 4.6.9 * @since 4.6.9
* @deprecated 理解错误请使用{@link #parseRFC2822(CharSequence)}
*/ */
@Deprecated
public static DateTime parseCST(CharSequence cstString) { public static DateTime parseCST(CharSequence cstString) {
if (cstString == null) { return parseRFC2822(cstString);
}
/**
* 解析RFC2822时间格式<br>
* <ol>
* <li>EEE MMM dd HH:mm:ss z yyyy例如Wed Aug 01 00:00:00 CST 2012</li>
* </ol>
*
* @param source RFC2822时间
* @return 日期对象
* @since 4.6.9
*/
public static DateTime parseRFC2822(CharSequence source) {
if (source == null) {
return null; return null;
} }
// issue#I9C2D4 // issue#I9C2D4
if(StrUtil.contains(cstString, ',')){ if(StrUtil.contains(source, ',')){
if(StrUtil.contains(cstString, "星期")){ if(StrUtil.contains(source, "星期")){
return parse(cstString, FastDateFormat.getInstance(DatePattern.HTTP_DATETIME_PATTERN, TimeZone.getTimeZone("GMT"), Locale.CHINA)); 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, "星期")){ if(StrUtil.contains(source, "星期")){
return parse(cstString, FastDateFormat.getInstance(DatePattern.JDK_DATETIME_PATTERN, TimeZone.getTimeZone("GMT"), Locale.CHINA)); 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 // Tue Jun 4 16:25:15 +0800 2019
// Thu May 16 17:57:18 GMT+08:00 2019 // Thu May 16 17:57:18 GMT+08:00 2019
// Wed Aug 01 00:00:00 CST 2012 // Wed Aug 01 00:00:00 CST 2012
return parseCST(dateStr); return parseRFC2822(dateStr);
} else if (StrUtil.contains(dateStr, 'T')) { } else if (StrUtil.contains(dateStr, 'T')) {
// UTC时间 // UTC时间
return parseUTC(dateStr); return parseUTC(dateStr);

View File

@ -705,7 +705,7 @@ public class DateUtilTest {
} }
@Test @Test
public void parseCSTTest() { public void parseRFC2822Test() {
final String dateStr = "Wed Sep 16 11:26:23 CST 2009"; final String dateStr = "Wed Sep 16 11:26:23 CST 2009";
final SimpleDateFormat sdf = new SimpleDateFormat(DatePattern.JDK_DATETIME_PATTERN, Locale.US); final SimpleDateFormat sdf = new SimpleDateFormat(DatePattern.JDK_DATETIME_PATTERN, Locale.US);
@ -713,7 +713,7 @@ public class DateUtilTest {
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
final DateTime parse = DateUtil.parse(dateStr, sdf); final DateTime parse = DateUtil.parse(dateStr, sdf);
DateTime dateTime = DateUtil.parseCST(dateStr); DateTime dateTime = DateUtil.parseRFC2822(dateStr);
Assert.assertEquals(parse, dateTime); Assert.assertEquals(parse, dateTime);
dateTime = DateUtil.parse(dateStr); dateTime = DateUtil.parse(dateStr);