【问题标题】:Why doesn't DateTime.ParseExact parse UTC format with the trailing Z?为什么 DateTime.ParseExact 不使用尾随 Z 解析 UTC 格式?
【发布时间】:2011-10-01 13:20:40
【问题描述】:

另一个 ParseExact 问题。我正在尝试将 UTC 格式的字符串解析为日期时间,格式为:

"YYYY-MM-DDThh:mm:ss.ssZ"

这是 UTC 格式,带有尾随 Z。由于某种原因,我无法准确解析它。我试过“u”、“s”、“o”自定义格式字符串,还有几个DateTimeStyles和手写的。文化是不变的。

由于某种原因,它不喜欢 Z,这表明它是一个 UTC 字符串。当我删除它时,解析。我很乐意,带着一些满足,摆脱尾随的 Z,因为我知道它们是 UTC 日期时间字符串,但我不能。有什么想法吗?

【问题讨论】:

    标签: .net datetime datetime-format datetime-parsing


    【解决方案1】:

    你提到的格式字符串是standard format strings。您可能应该使用custom format string,如下所示:

    DateTime.ParseExact("2011-03-02T20:15:19.64Z", "yyyy-MM-ddTHH:mm:ss.ffK", null).ToUniversalTime()
    

    如果你不把ToUniversalTime()放在最后,结果会被转换成你当地的时区。

    【讨论】:

    • @scope,是的,确实如此。但是上面ParseExact() 的结果对我来说是2.3.2011 21:15:19 (UTC+1),DateTimeKind.Local。要获取 UTC 时间,您必须致电 ToUniversalTime()
    • 我更喜欢使用 DateTimeStyles 而不是 ToUniversal 的重载。我不确定ToUniversal 在 DST 切换时是否正常工作。
    • 更好的解决方案是使用DateTimeStyles.RoundTripKind。这保留了Kind 属性,因此您无需调用 ToUniversalTime();
    • @Joe 正确大小写:DateTimeStyles.RoundtripKind
    猜你喜欢
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 2021-11-15
    相关资源
    最近更新 更多