将RSS pubdate解析为DateTime

时间:2015-12-17 09:57:55

标签: c# parsing datetime rss

我从RSS中获取此日期字符串:

  

2015年12月16日星期三17:57:15 +0100

我需要解析为DateTime。我用谷歌搜索和搜索堆栈溢出并得到以下答案(香港专业教育学院尝试只有一个,两个和四个'z'而不是三个)

string parseFormat = "ddd, dd MMM yyyy HH:mm:ss zzz";
DateTime date = DateTime.ParseExact(dateString, parseFormat,
                                    DateTimeFormatInfo.CurrentInfo,
                                    DateTimeStyles.None);

但是我收到了这个错误:

  

System.FormatException:String未被识别为有效   日期时间。

2 个答案:

答案 0 :(得分:7)

将您的代码更改为

  string parseFormat = "ddd, dd MMM yyyy HH:mm:ss zzz";
  DateTime date = DateTime.ParseExact(dateString, parseFormat,
                                            CultureInfo.InvariantCulture);

希望它有所帮助!

答案 1 :(得分:1)

如评论所示,如果您的CurrentCulture 基于英语,则格式和字符串与相匹配,除非。如果不是,则无法成功解析这些WedDec部分。

另一方面,zzz格式说明符不建议用于DateTime解析。

来自documentation;

  

使用DateTime值,"zzz"自定义格式说明符表示   从UTC签署的本地操作系统时区的偏移量,   以小时和分钟计。它没有反映出一个人的价值   实例DateTime.Kind属性。 出于这个原因," zzz"格式   建议不要将说明符与DateTime值一起使用。

但是,我会将其解析为DateTimeOffset而不是DateTime,因为您的字符串中有UTC偏移量;

var dateString = "Wed, 16 Dec 2015 17:57:15 +0100";
string parseFormat = "ddd, dd MMM yyyy HH:mm:ss zzz";
DateTimeOffset dto = DateTimeOffset.ParseExact(dateString, parseFormat,
                                               CultureInfo.InvariantCulture,
                                               DateTimeStyles.None);

现在,DateTimeOffset{16.12.2015 17:57:15 +01:00},而+01:00 Offset部分为df = db.query(""" SELECT a,b FROM c ORDER BY d DESC """)

enter image description here