在C#中解析DateTimeOffset字符串

cru*_*tux 1 c# datetime parsing datetimeoffset

我需要从多种格式的字符串中解析datetimeoffsets.其中一个失败的字符串是:08/12/1992 07.00.00 -05:00

现在当我尝试解析这个时,我使用:

DateTimeOffset.ParseExact("08/12/1992 07.00.00 -05:00", "dd/MM/yyyy HH:mm:ss zzz", CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)

这给了一个FormatException:

"字符串未被识别为有效的DateTime."

我也可以尝试在分隔符中添加分隔符:

DateTimeOffset.ParseExact("08/12/1992 07.00.00 -05:00", "dd'/'MM'/'yyyy HH':'mm':'ss zzz", CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)

...或其他小/大写字母或分隔符的排列,但我得到同样的错误.

任何人都可以告诉我为什么上面的ParseExact行不起作用,以及如何纠正它们?

编辑:我尝试使用LINQ查询用点(: - >.)替换冒号.显然这不能正常工作 - 感谢回复.

Chr*_*n.K 5

您的实际日期(实际时间)字符串用点分隔从秒到分钟的小时数.,因此您的格式必须相同:

DateTimeOffset.ParseExact("08/12/1992 07.00.00 -05:00", 
    "dd/MM/yyyy HH.mm.ss zzz", CultureInfo.InvariantCulture)
//                ^  ^
//                |  |
Run Code Online (Sandbox Code Playgroud)

如果数据中有多种字符串格式,则可以执行以下操作:

    public static DateTimeOffset Parse(string str)
    {
        string[] formats =
        {
            "dd/MM/yyyy HH.mm.ss zzz",
            "dd/MM/yyyy HH:mm:ss zzz"
            // ... possibly more ...
        };

        var dto = new DateTimeOffset();
        if (!formats.Any(f => DateTimeOffset.TryParseExact(str, f, CultureInfo.InvariantCulture, DateTimeStyles.None, out dto)))
        {
            throw new ArgumentException("Unrecognized date format");
        }

        return dto;
    }
Run Code Online (Sandbox Code Playgroud)