我有这个字符串:“14。januar 2013 9:15:00 EST”。
据我所知,格式如下:d。 MMMM yyyy H:mm:ss EST,但我尝试了以下代码,但没有任何效果。我在这里做错了什么?
private static string[] _dateFormats = new[] {
@"d. MMMM yyyy H:mm:ss \E\S\T",
@"d. MMMM yyyy h:mm:ss \E\S\T",
@"d. MMMM yyyy H:mm:ss E\S\T",
@"d. MMMM yyyy h:mm:ss E\S\T",
@"d. MMMM yyyy H:mm:ss EST",
@"d. MMMM yyyy h:mm:ss EST",
@"dd-MM-yyyy HH:mm:ss"
};
private static DateTimeStyles _styles = DateTimeStyles.AllowLeadingWhite
| DateTimeStyles.AllowInnerWhite
| DateTimeStyles.AllowTrailingWhite
| DateTimeStyles.AllowWhiteSpaces;
DateTime dt;
DateTime.TryParseExact(dateTime, _dateFormats, CultureInfo.InvariantCulture, _styles, out dt);
更新
使用丹麦CultureInfo就可以了。然而,这也不起作用:Tir,2013年1月15日11:00:00
DateTime.TryParseExact(test, @"ddd, dd MMM yyyy HH:mm:ss", CultureInfo.GetCultureInfo("da-DK"), _styles, out dt);
Tir等于星期二或“星期二”。为什么不被认可?
基本上我正在尝试解析用于监视RSS提要的有些格式错误的日期时间字符串。许多RSS提要都没有验证,但由于我无法改变这一点,无论如何我需要一个很好的方法来解析它们。我已经将当前时间用作一种指南,因为解析的订阅源项目不应该超过一小时。这意味着缺少正确的时区,可以设置为前一个小时的最后一分钟。
EG。我得到以下日期时间字符串:Tir,2013年1月15日11:15:00。它没有时区的指示,但由于饲料项目是在UTC时间14:18提取的,因此很可能是在UTC时间14:15发布的。
这个问题起初是一个有点微不足道的错误修复,但更可能是一个关于如何解决这个问题的问题。有没有人有一些好主意?
感谢。
答案 0 :(得分:1)
你将不得不摆脱“EST”时区指标。它们不兼容并且非常含糊不清。 EST可以是美国(UTC-5)和澳大利亚(UTC + 10)的东部标准时间。 CST是一个有5个不同时区的doozy。你必须使用String.SubString()来关闭它。
除丹麦日期之外,该字符串采用标准格式,不需要ParseExact()。这在我的美国机器上运行良好:
var ci = System.Globalization.CultureInfo.GetCultureInfo("da-DK");
var s = "14. januar 2013 9:15:00";
var dt = DateTime.Parse(s, ci.DateTimeFormat);