在C#,。NET 4.0中解析RFC1123格式的日期

我试图解析RFC1123格式的日期(星期四,2010年1月21日17:47:00美国东部时间)。

这是我尝试但没有效果:

DateTime Date = DateTime.Parse(dt); DateTime Date = DateTime.ParseExact(dt, "r", null); 

你尝试过类似的东西:

 string dateString, format; DateTime result; CultureInfo provider = CultureInfo.InvariantCulture; dateString = "Thu, 21 Jan 2010 17:47:00 EST"; format = "ddd, dd MMM yyyy hh:mm:ss EST"; result = DateTime.ParseExact(dateString, format, provider); Console.WriteLine("{0} converts to {1}.", dateString, result.ToString()); 

我还没有测试过(稍后会测试)…但我相信会为你做到这一点。

编辑:似乎问题是RFC1123声明时区应该始终是GMT …这就是r或R不能作为格式的原因。 问题是EST。 上面的模式考虑了EST,但它是静态的,所以如果你有任何其他时区,你可能会遇到麻烦。 最好的解决方案是使用RFC1123标准并转到GMT,它应该可以解决您的问题。 如果你不能,请告诉我,我可能有解决方案。

编辑2:这不是一个完整的解决方案,但它的作用是隔离时区并仍允许您解析它。 代码不知道它所呈现的时区,但你可以抛出任何时区缩写,它将解析时间。 如果你想转换为GMT然后使用r或R你可以得到正则表达式匹配的结果,把它放在查找表上(看看时区偏移它的时间缩写),然后将时间转换为GMT和从那里解析。 这将是一个很好的解决方案,但需要更多的工作。 这是代码:

 string dateString, format, pattern, tz; DateTime result; CultureInfo provider = CultureInfo.InvariantCulture; pattern = @"[a-zA-Z]+, [0-9]+ [a-zA-Z]+ [0-9]+ [0-9]+:[0-9]+:[0-9]+ (?[a-zA-Z]+)"; dateString = "Thu, 21 Jan 2010 17:47:00 EST"; Regex findTz = new Regex(pattern, RegexOptions.Compiled); tz = findTz.Match(dateString).Result("${timezone}"); format = "ddd, dd MMM yyyy HH:mm:ss " + tz; try { result = DateTime.ParseExact(dateString, format, provider); Console.WriteLine("Timezone format is: {0}", format); Console.WriteLine("{0} converts to {1}.", dateString, result.ToString()); } catch (FormatException) { Console.WriteLine("{0} is not in the correct format.", dateString); } Console.ReadLine(); 

如果您想将此转换为时区转换器,请输入以下UTC列表:

时区缩写与UTC偏移