我从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未被识别为有效 日期时间。
答案 0 :(得分:7)
将您的代码更改为
string parseFormat = "ddd, dd MMM yyyy HH:mm:ss zzz";
DateTime date = DateTime.ParseExact(dateString, parseFormat,
CultureInfo.InvariantCulture);
希望它有所帮助!
答案 1 :(得分:1)
如评论所示,如果您的CurrentCulture
基于英语,则格式和字符串与相匹配,除非。如果不是,则无法成功解析这些Wed
和Dec
部分。
另一方面,zzz
格式说明符不建议用于DateTime
解析。
使用
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
""")
。