我正在尝试根据UTC时间差获取本地日期时间,并执行以下代码。
var dtString =DateTime.UtcNow.ToString(@"yyyy-MM-ddTHH\:mm\:ss.fzzz");
但是每次它都返回一个异常,如下图:
为什么会出现这个异常?如何解决这个问题?
我正在尝试根据UTC时间差获取本地日期时间,并执行以下代码。
var dtString =DateTime.UtcNow.ToString(@"yyyy-MM-ddTHH\:mm\:ss.fzzz");
但是每次它都返回一个异常,如下图:
为什么会出现这个异常?如何解决这个问题?
z
格式说明符用于显示本地时间和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在链接中解释的那样):
var dtString = DateTime.UtcNow.ToString(@"yyyy-MM-ddTHH\:mm\:ss.fzzz");
"2015-02-18T12:08:15.1 +01:00"
这里的“本地时间”和“本地时区”是指实际使用的时间和时区,而不是UTC时间和本地时区。
此外,您可以在TimeZone.CurrentTimeZone Property中找到更多关于时区的信息和好的例子。
完整的消息文本可能会回答您的问题:
当使用“z”格式说明符调用DateTime.ToString时,输出将包括本地时区偏移量,从而可能导致此问题。在这种情况下,可以使用“Z”格式说明符指定UTC时间,或者使用“o”格式字符串,这是将DateTime持久化为文本的推荐方式。
您的格式字符串包含z
说明符"yyyy-MM-ddTHH\:mm\:ss.fzzz"
。请尝试将其更改为"yyyy-MM-ddTHH\:mm\:ss.fZZZ"
。