为什么DateTime.ParseExact不用尾随Z解析UTC格式?

sco*_*eep 11 .net datetime datetime-format datetime-parsing

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

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

这是UTC格式,尾随Z.由于某种原因,我无法解析它.我尝试过"u","s","o"自定义格式字符串,以及几个DateTimeStyles以及手写.文化是不变的.

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

svi*_*ick 18

您提到的格式字符串是标准格式字符串.您应该使用自定义格式字符串,如下所示:

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

如果您没有放在ToUniversalTime()最后,结果将转换为您当地的时区.

  • 更好的解决方案是使用`DateTimeStyles.RoundTripKind`.这保留了`Kind`属性,因此您不需要调用ToUniversalTime(); (11认同)
  • 我更喜欢使用`DateTimeStyles`超过`ToUniversal`的重载.我不确定`ToUniversal`是否能在DST切换时正常工作. (4认同)