解析SyndicationFeed中的DateTime值

时间:2014-12-16 20:37:01

标签: c# datetime rss atom-feed

我使用下面的代码解析原子Feed:

using(var reader = new MyXmlReader("http://tutsplus.com/courses.atom")) {

    var doc = SyndicationFeed.Load(reader);
    var newFeed = new AtomFeed {
        Id = doc.Id,
        Title = doc.Title.Text,
        Url = url,
        UpdateDate = DateTime.Now
    };
    XNamespace dc = "http://www.w3.org/2005/Atom";
    newFeed.AtomEntries = (from entry in doc.Items
    select new AtomEntry {
        Id = entry.Id,
        Links = entry.Links,
        Title = entry.Title.Text,
        Content = entry.Content.ToString(),
        PublishDate = entry.PublishDate.DateTime,
        UpdatedDate = entry.LastUpdatedTime.DateTime,
        Authors = entry.Authors
    }).ToList();

}

似乎我的Feed中字符串未被识别为有效的DateTime。我也知道(+SyndicationFeed.Load方法希望接收标准格式的Feed,如下所示:Mon, 05 Oct 2015 08:00:06 GMT。所以我创建了custom XML reader来识别不同的日期格式。但仍有同样的错误!
任何的想法?

1 个答案:

答案 0 :(得分:1)

当我尝试使用链接的自定义XML阅读器时,在解析“已发布”和“已更新”日期时,我也遇到了此错误。查看Atom10FeedFormatter类的代码,它正在尝试以这些格式解析日期(DateFromString方法)

    const string Rfc3339LocalDateTimeFormat = "yyyy-MM-ddTHH:mm:sszzz";
    const string Rfc3339UTCDateTimeFormat = "yyyy-MM-ddTHH:mm:ssZ";

http://reflector.webtropy.com/default.aspx/WCF/WCF/3@5@30729@1/untmp/Orcas/SP/ndp/cdf/src/NetFx35/System@ServiceModel@Web/System/ServiceModel/Syndication/Atom10FeedFormatter@cs/2/Atom10FeedFormatter@cs

所以我在MyXmlReader实现中更改了设置格式yyyy-MM-ddTHH:mm:ssZ,然后对此日期解析一切都很好(我还必须在ReadStartElement中更改元素名称以设置{ {1}}等于true,即已发布和更新。

readingDate