我试图从播客XML解析DateTime数据。
基本上,它包含http头格式。
(Format-A) Fri, 28 Aug 2015 00:00:00 EST
但是,有时它有不同的格式,有4位数的日期和月份,如下所示。
(Format-B) Thur, 30 July 2015 00:00:00 EST
我不知道Podcast为何同时提供2种不同的格式。
我以为我可以简单地解析这个网站提到的格式。
https://www.dotnetperls.com/datetime-parse
但它并没有使用DateTime.Parse()方法
所以我写了这段代码。
try
{
dtPubDate = DateTime.ParseExact(strhttpTime,
"ddd, dd MMM yyyy HH:mm:ss 'EST'",
CultureInfo.InvariantCulture.DateTimeFormat,
DateTimeStyles.AssumeUniversal);
}
catch (FormatException)
{
dtPubDate = DateTime.ParseExact(strhttpTime,
"dddd, dd MMMM yyyy HH:mm:ss 'EST'",
CultureInfo.InvariantCulture.DateTimeFormat,
DateTimeStyles.AssumeUniversal);
}
在我编写此代码时,如果第一种格式不起作用,请尝试第二种格式。
但它仍然是Format-B的例外。
此URL是我遇到的问题。
http://www.thebreathingmusic.com/podcast/podcast.xml
正如您所看到的,pubDate标签有两种不同的格式。
我错过了什么?
答案 0 :(得分:2)
格式字符串dddd
将与整个日期名称匹配,例如"星期四",而不是4个字符。
来自table 13:
" dddd"自定义格式说明符(加上任意数量的附加" d"说明符)表示星期几的全名。从当前或指定区域性的DateTimeFormatInfo.DayNames属性中检索星期几的本地化名称。
您可以在逗号之前修剪所有内容,然后解析它。
var tidyDate = strhttpTime.Split(',')[1].Trim();
dtPubDate = DateTime.ParseExact(
tidyDate,
"ddd, dd MMM yyyy HH:mm:ss 'EST'",
CultureInfo.InvariantCulture.DateTimeFormat,
DateTimeStyles.AssumeUniversal);