从pubDate RSS标记中提取日期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从pubDate RSS标记中提取日期相关的知识,希望对你有一定的参考价值。

开发android应用程序并需要从RSS解析pubDate标记。从这个标签显示实际时间没有问题,但它太长了

<pubDate>Wed, 15 Nov 2017 14:46:40 +0000</pubDate>

我真正感兴趣的是如何约会,在这种情况下15 Nov被提取。此外,我想基于pubDate标记按降序比较日期和显示帖子。

答案

如果您使用罗马来阅读RSS,您可以像下面一样格式化pubDate。 https://rometools.github.io/rome/

getPubDate()返回Date类型。您可以按流操作进行排序或比较。

import com.rometools.rome.feed.synd.SyndFeed;
import com.rometools.rome.io.SyndFeedInput;
import com.rometools.rome.io.XmlReader;

import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.stream.Collectors;

public class NewsService {

    public List<String> getNews(String url) throws Exception {
        // read RSS
        SyndFeed feed = new SyndFeedInput().build(new XmlReader(new URL(url)));
        // format pubDate and create pubDate string list
        SimpleDateFormat sdf = new SimpleDateFormat("dd MMM");
        return feed.getEntries().stream().map(i -> i.getPublishedDate()).map(sdf::format).collect(Collectors.toList());
    }
}
另一答案

Java类库可以解析RSS日期/时间值。

RSS日期/时间值在RFC 822 format中。您可以使用DateFormat包中的SimpleDateFormatjava.text类解析其中一个日期。

首先,为RFC 822创建日期格式化程序,并使用它来解析pubdate元素中的字符串:

DateFormat formatter = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
Date pubdate = formatter.parse("Wed, 15 Nov 2017 14:46:40 +0000");

parse()的调用从ParseException包中抛出java.text,所以你必须用try / catch包围它或在方法中使用throws子句。

接下来,创建一个日历并将其设置为该日期:

    Calendar cal = Calendar.getInstance();
    cal.setTime(pubdate);

最后,从该日历获取月份和月份。

    System.out.println("Month: " + cal.get(Calendar.MONTH));
    System.out.println("Day: " + cal.get(Calendar.DAY_OF_MONTH));

以上是关于从pubDate RSS标记中提取日期的主要内容,如果未能解决你的问题,请参考以下文章

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

Swift 2:将 RSS pubDate 解析为 NSDate 对象

在 Android 中添加 ListView 子项文本

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

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

MailChimp RSS广告系列:强制包含旧帖子