我正在尝试参考UTC时间间隔获取本地日期时间,我正在执行以下代码。
var dtString =DateTime.UtcNow.ToString(@"yyyy-MM-ddTHH\:mm\:ss.fzzz");
但每次它都返回一个例外
为什么会出现这种异常,如何解决此问题?
答案 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"
。