如何使用“G8T”和“G12T”等时区解析日期字符串?

时间:2013-07-17 21:52:53

标签: .net parsing datetime http-headers

在ASP.NET应用程序中,我需要在从远程服务器检索某些图像时检查修改日期。 “Last-Modified”的标题值是如下字符串:

  • 星期四,2011年12月8日19:57:12 G12T
  • Thu,2003年8月14日16:13:20 G8T

.NET的DateTime.Parse()方法失败了FormatException(“字符串未被识别为有效的DateTime。从索引26开始有一个未知的单词。”)。我可以通过选项来使(ny)解析方法识别那些时区指标吗?我之前没有见过它们,a Google search在论坛和类似网站上发现了一些明显的用法,但没有关于它们含义的有用信息。

(奇怪的是,相同图像上“日期”的标题值以“GMT”结尾。远程服务器是IIS 7.5。)

1 个答案:

答案 0 :(得分:2)

我现在无法轻松检查,但可能会工作:

DateTimeOffset result = DateTimeOffset.ParseExact(text,
    "ddd, dd MMM yyyy HH:mm:ss 'G'z'T'",
    CultureInfo.InvariantCulture);

那是使用z custom specifier ...总是格式带有符号,但在解析时可能不需要一个。

如果您愿意使用前沿代码,我相信Noda Time 1.2(未发布)应该能够使用OffsetDateTimePattern ddd, dd MMM yyyy HH:mm:ss 'G'o<-H>'T'来应对这种情况。同样,我现在无法测试,但我期望它可以工作。它确实意味着使用当前未发布的代码运行...