【问题标题】:Parsing a DateTimeOffset string in C#在 C# 中解析 DateTimeOffset 字符串
【发布时间】:2015-09-28 13:24:14
【问题描述】:

我需要从多种格式的字符串中解析 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)

这给出了FormatException

“字符串未被识别为有效的日期时间。”

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

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

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

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

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

【问题讨论】:

  • 这看起来不像是文化不变的日期时间字符串。

标签: c# parsing datetime datetimeoffset


【解决方案1】:

您的实际日期(实际时间)字符串用点 . 分隔小时和分钟和秒,因此您的格式必须这样做:

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

如果你的数据中有多种字符串格式,你可以这样做:

    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;
    }

【讨论】:

    【解决方案2】:

    在声明中

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

    格式字符串使用:作为时间部分的分隔符,但数据参数使用.作为分隔符。

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 2020-11-19
      • 2010-10-11
      • 1970-01-01
      • 2023-03-18
      • 2018-12-16
      • 2018-09-18
      相关资源
      最近更新 更多