发生 DateTimeInvalidLocalFormat

DateTimeInvalidLocalFormat occurred

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

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

但每次 return 我都是例外,因为

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

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

This can happen when calling DateTime.ToString using the 'z' format specifier, which will include a local time zone offset in the output. In that case, either use the 'Z' format specifier, which designates a UTC time, or use the 'o' format string, which is the recommended way to persist a DateTime in text.

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

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