0

我有这个字符串:“2013 年 1 月 14 日 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);

更新:

使用丹麦文化信息就可以了。但是,这也不起作用: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 等于 Tue 或“Tuesday”。为什么不被识别?

基本上,我试图解析用于监控 RSS 提要的大量格式错误的日期时间字符串。许多 RSS 提要无法验证,但由于我无法更改这一点,因此无论如何我都需要一个好的方法来解析它们。虽然我有关于使用当前时间作为一种指导方针,因为解析的提要项目不应该超过一个小时。这意味着缺少正确的时区,可以设置为前一小时的最后一分钟。

例如。我得到以下日期时间字符串:Tir,2013 年 1 月 15 日 11:15:00。它没有时区指示,但由于提要项目是在 14:18 UTC 提取的,因此很可能在 14:15 UTC 发布。

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

谢谢。

4

1 回答 1

1

您将不得不摆脱“EST”时区指示器。它们不兼容并且非常模棱两可。EST 可以是美国 (UTC-5) 和澳大利亚 (UTC+10) 的东部标准时间。CST 是一个有 5 个不同时区的笨蛋。您必须使用 String.SubString() 将其关闭。

否则,该字符串采用丹麦日期的标准格式,不需要 ParseExact()。这在我的 en-US 机器上运行良好:

var ci = System.Globalization.CultureInfo.GetCultureInfo("da-DK");
var s = "14. januar 2013 9:15:00";
var dt = DateTime.Parse(s, ci.DateTimeFormat);
于 2013-01-15T12:46:39.663 回答