发生了DateTimeInvalidLocalFormat

时间:2015-02-18 11:41:46

标签: c# datetime-format

我正在尝试参考UTC时间间隔获取本地日期时间,我正在执行以下代码。

 var dtString =DateTime.UtcNow.ToString(@"yyyy-MM-ddTHH\:mm\:ss.fzzz"); 

但每次它都返回一个例外

enter image description here

为什么会出现这种异常,如何解决此问题?

2 个答案:

答案 0 :(得分:6)

z格式说明符用于显示本地时间和UTC时间之间的偏移量。

将它与UTC时间一起使用是没有意义的(因为它始终为0)。这就是你收到警告的原因(感谢@HansPassant的这句话)。

你可以:

想要将当地时间和偏移量打印到UTC(标准):

var dtString = DateTime.Now.ToString(@"yyyy-MM-ddTHH\:mm\:ss.f zzz");

或者想要打印UTC时间和当地时区(真的不常见):

var dtString = DateTime.UtcNow.ToString(@"yyyy-MM-ddTHH\:mm\:ss.f") + " " + DateTime.Now.ToString(@"zzz"); 

这或多或少等同于您的代码(如@JeroenMostert link中所述):

var dtString = DateTime.UtcNow.ToString(@"yyyy-MM-ddTHH\:mm\:ss.fzzz"); 

但结果字符串根本不是标准并导致误解。

"2015-02-18T12:08:15.1 +01:00"

读为本地时间本地时区而不是 UTC时间本地时区

此外,您可以在此处找到有关时区的更多信息以及好的示例:TimeZone.CurrentTimeZone Property

答案 1 :(得分:-1)

完整的消息文本可能会回答您的问题:

  

使用' z'来调用DateTime.ToString时会发生这种情况。格式   说明符,它将在输出中包含本地时区偏移量。   在这种情况下,要么使用' Z'格式说明符,指定一个   UTC时间,或使用' o'格式字符串,这是推荐的方式   在文本中保留DateTime。

您的格式字符串包含z说明符"yyyy-MM-ddTHH\:mm\:ss.fzzz"。尝试将其更改为"yyyy-MM-ddTHH\:mm\:ss.fZZZ"