在java中将RSS pubDate解析为日期对象

Posted

技术标签:

【中文标题】在java中将RSS pubDate解析为日期对象【英文标题】:Parse RSS pubDate to Date object in java 【发布时间】:2011-02-11 22:18:23 【问题描述】:

如何将 RSS 提要中的 pubDate 解析为 java 中的 Date 对象。

RSS 提要中的格式: 2010 年 4 月 24 日星期六 14:01:00 GMT

我现在拥有的:

DateFormat dateFormat = DateFormat.getInstance();
Date pubDate = dateFormat.parse(item.getPubDate().getText());

但是这段代码会抛出 ParseException 并显示 Unparseable date 消息

【问题讨论】:

【参考方案1】:

您可以使用 SimpleDateFormat 类定义您尝试解析的日期格式:

DateFormat formatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");
Date date = formatter.parse("Sat, 24 Apr 2010 14:01:00 GMT");

另外,对于非英语Locale,在解析英文日期时,请务必使用以下内容:

new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.ENGLISH);

【讨论】:

【参考方案2】:

如果您需要符合 RFC822 的日期,请尝试以下操作:

DateFormat dateFormatterRssPubDate = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.ENGLISH);

【讨论】:

【参考方案3】:

对于可以使用 Java 8 LocalDateTime 的幸运者:

LocalDateTime localDateTime = LocalDateTime.from(DateTimeFormatter.RFC_1123_DATE_TIME.parse("Sat, 24 Apr 2010 14:01:00 GMT"));

【讨论】:

这不仅更容易,而且首先更不容易出错。谢谢。 PS LocalDateTimeDateTimeFormatter 已在 ThreeTen Backport 中向后移植到 Java 6 和 7。 例外情况:“2019 年 3 月 12 日星期二 10:05:52 EDT”和文本“2019 年 3 月 6 日星期三 14:05:00 PST”无法在索引 25 处解析。 @DanielDeLeón 这似乎与the documentation 一致:不处理北美地区名称和军事地区名称。 我认为 RSS 遵循 RFC 822 此处,并且 PST 、PDT、MST、MDT、CST、CDT、EST 和 EDT 被允许:link。

以上是关于在java中将RSS pubDate解析为日期对象的主要内容,如果未能解决你的问题,请参考以下文章

从pubDate RSS标记中提取日期

RSS格式化日期(pubDate)的日期函数参数

将RSS日期/时间字符串解析为日期/时间对象

xslt 通过子节点和位置选择 rss 项目

如何在 Swift 中将 Firestore FieldValue 解析为日期

如何访问所选元素,例如标题,描述,来自rss feed的日期?