C# 发生DateTimeInvalidLocalFormat
我正在尝试获取与UTC时间间隔相关的本地日期时间,我正在执行下面的代码C# 发生DateTimeInvalidLocalFormat,c#,datetime-format,C#,Datetime Format,我正在尝试获取与UTC时间间隔相关的本地日期时间,我正在执行下面的代码 var dtString =DateTime.UtcNow.ToString(@"yyyy-MM-ddTHH\:mm\:ss.fzzz"); 但每次它都会返回一个异常作为 为什么会出现此异常,如何修复此异常?完整的消息文本可能会回答您的问题: 使用“z”格式调用DateTime.ToString时可能会发生这种情况 说明符,该说明符将在输出中包含本地时区偏移。 在这种情况下,可以使用“Z”格式说明符,该说明符指定 U
var dtString =DateTime.UtcNow.ToString(@"yyyy-MM-ddTHH\:mm\:ss.fzzz");
但每次它都会返回一个异常作为
为什么会出现此异常,如何修复此异常?完整的消息文本可能会回答您的问题: 使用“z”格式调用DateTime.ToString时可能会发生这种情况 说明符,该说明符将在输出中包含本地时区偏移。 在这种情况下,可以使用“Z”格式说明符,该说明符指定 UTC时间,或使用“o”格式字符串,这是推荐的方式 在文本中保留日期时间
格式字符串包含
z
说明符“yyyy-MM-ddTHH\:MM\:ss.fzzz”
。尝试将其更改为“yyyy-MM-ddTHH\:MM\:ss.fZZZ”
格式说明符用于显示本地时间和UTC时间之间的偏移量
将其与UTC时间一起使用是没有意义的(因为它始终为0)。这就是你得到警告的原因(感谢@HansPassant的这句话)
您可以:
要打印本地时间和UTC(标准格式)的偏移量:
或者要打印UTC时间和本地时区(实际上是不常见的):
这多少相当于您的代码(如@jeroenmoster中所述):
但是结果字符串根本就不是标准的,并且会导致误解
"2015-02-18T12:08:15.1 +01:00"
读取为本地时间和本地时区,而不是UTC时间和本地时区
此外,您还可以在此处找到有关时区的更多信息和好的示例:您看过吗?这不是例外,它只是一个调试器警告。按F5继续。如果不想看到它,请使用调试>异常>托管调试助手>取消选中DateTimeInvalidLocalFormat选项。不要为生成一个无意义的字符串而烦恼,UTC日期当然没有UTC偏移量。谢谢@HansPassant,明白了,愚蠢的我没有想到UTC日期和偏移量。这只会在字符串中产生“ZZZ”。这个信息有点误导;“Z”实际上不是一个格式说明符,但末尾的单个“Z”(未经更改地传递)表示UTC时间。
var dtString = DateTime.UtcNow.ToString(@"yyyy-MM-ddTHH\:mm\:ss.f") + " " + DateTime.Now.ToString(@"zzz");
var dtString = DateTime.UtcNow.ToString(@"yyyy-MM-ddTHH\:mm\:ss.fzzz");
"2015-02-18T12:08:15.1 +01:00"