And*_*ers 5 .net c# datetime utc linqpad
这个(LINQPad代码段):
DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz").Dump();
DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:sszzz").Dump();
Run Code Online (Sandbox Code Playgroud)
返回:
2016-01-08T09:05:04-07:00 // Expected
2016-01-08T16:05:04-07:00 // Not what I expected
Run Code Online (Sandbox Code Playgroud)
鉴于第二个结果是通用时间,我预计它会返回2016-01-08T16:05:04-00:00(时区偏移为零).
我错过了什么或这是一个错误吗?
我想结合Gusman和Evan的评论,如果他们允许我,就会反对他们.让我们一步一步走..
应该
DateTime.UtcNow有时区偏移吗?
无论Kind它具有什么(Local,Utc或Unspecified),DateTime实例都不保留任何 UTC偏移值.期.
首先,让我们来看看该"zzz"格式说明文件;
使用DateTime值,"zzz"自定义格式说明符表示本地操作系统的时区与UTC的签名偏移量,以小时和分钟为单位.它不反映实例的DateTime.Kind属性的值.因此,建议不要将"zzz"格式说明符与DateTime值一起使用.
基于前两个粗体句子,LINQPad生成的结果都是完全可以预期的.您也可以在Visual Studio中获得相同的结果(预计课程的日期和时间部分).
只需将此代码作为"无需调试启动"(Ctrl+ F5)运行
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz"));
Console.WriteLine(DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:sszzz"));
Run Code Online (Sandbox Code Playgroud)
但是,当你用(F5)开始运行它时,开始调试呢?
在这种情况下,有两个选项取决于您DateTimeInvalidLocalFormat的托管调试助手是否勾选.此部分位于Debug菜单上,然后单击Exceptions.
如果选中此选项,则会出现例外情况并且表示;
一个
UTC日期时间正在转换的格式只对本地时间正确的文本.DateTime.ToString使用'z'格式说明符调用时会发生这种情况 ,格式说明符将在输出中包含本地时区偏移量.在这种情况下,要么使用'Z'指定UTC时间的格式说明符,要么使用'o'格式字符串,这是在文本中保留DateTime的推荐方法.
如果未勾选此选项,则不会收到任何消息,结果将与LINQPad相同.
鉴于第二个结果是通用时间,我预计它会返回
2016-01-08T16:05:04-00:00(时区偏移为零).
正如我所解释的,zzz格式说明并没有那样做的任何 DateTime实例.
但对于DateTimeOffset记录为的实例,它的行为有所不同;
对于
DateTimeOffset值,此格式说明符表示OffsetUTC 的DateTimeOffset值,以小时为单位.
而DateTimeOffset.Now和DateTimeOffset.UtcNow是完全符合您的期望,无论你在LINQPad或Visual Studio中运行,因为它们被记录为;
现在
DateTimeOffset对象,其日期和时间是当前本地时间,其偏移量是本地时区与协调世界时(UTC)的偏移量.
UtcNow
日期和时间为当前协调世界时(UTC)且其偏移量为的对象
TimeSpan.Zero.
Console.WriteLine(DateTimeOffset.Now.ToString("yyyy-MM-ddTHH:mm:sszzz"));
Console.WriteLine(DateTimeOffset.UtcNow.ToString("yyyy-MM-ddTHH:mm:sszzz"));
Run Code Online (Sandbox Code Playgroud)
会产生
2016-01-08T09:05:04-07:00
2016-01-08T16:05:04-00:00
Run Code Online (Sandbox Code Playgroud)
Tl; dr我认为这不是一个bug.LINQPad产生正确的结果究竟应该是什么.在Visual Studio中,如果在调试模式下勾选了该选项,则可能会出现异常.
| 归档时间: |
|
| 查看次数: |
1042 次 |
| 最近记录: |