DateTime格式 - 我做错了什么?

时间:2013-01-15 10:50:55

标签: .net datetime-format datetime-parsing

我有这个字符串:“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发布的。

这个问题起初是一个有点微不足道的错误修复,但更可能是一个关于如何解决这个问题的问题。有没有人有一些好主意?

感谢。

1 个答案:

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