日期时间格式问题:如何将日期时间转换为4位数天或月

时间:2017-02-23 17:22:53

标签: c# xml wpf datetime

我试图从播客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标签有两种不同的格式。
我错过了什么?

1 个答案:

答案 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);