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

时间:2016-03-03 14:21:10

标签: java rss

如何将pubDate从RSS提要解析为java中的Date对象。 格式为:2016年3月3日星期四15:30:00 +0200

我试着这样做:

DateFormat formatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.ENGLISH);
        //java.util.Date utilDate = new java.util.Date();
        java.util.Date utilDate = new java.util.Date();
        try {
            utilDate = formatter.parse(date);
        }
        catch (java.text.ParseException p1)
        {
            p1.printStackTrace();
        }
        java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

但java.sql.Date只保存日期而没有时间 例如:" 2016-02-06 00:00:00"

2 个答案:

答案 0 :(得分:1)

java.sql.Date没有时间

您应该使用java.sql.Timestamp

您可以像这样使用

new java.sql.Timestamp(utilDate.getTime());

答案 1 :(得分:1)

RFC 1123

输入字符串的格式恰好被定义为标准RFC 1123

这种格式早已被ISO 8601定义的更明智的格式所淹没。如果可能,我强烈建议迁移。

java.time

您正在使用旧的日期时间类,这些类已经被Java 8及更高版本中内置的java.time框架所破坏。

您的输入格式恰好在java.time中预定义为常量。因此无需指定格式化模式。

String input = "Thu, 03 Mar 2016 15:30:00 +0200";
DateTimeFormatter formatter = DateTimeFormatter.RFC_1123_DATE_TIME ;
OffsetDateTime odt = OffsetDateTime.parse( input , formatter );

有一天,JDBC驱动程序将更新为直接使用java.time类型。在此之前转换为java.sql类型,特别是java.sql.Timestamp。要转换,我们需要一个Instant,在UTC时间轴上的一个时刻。我们可以从OffsetDateTime中提取一个。

Instant instant = odt.toInstant();
java.sql.Timestamp ts = java.sql.Timestamp.from( instant );