为什么DateTime.Now和DateTime.UtcNow不是我当前的本地日期时间?

Moh*_*mad 18 c# asp.net datetime visual-studio

我们使用DateTime.Now,但时间不等于我们的服务器时间!

当我运行我的项目时,这些是DateTime属性值:

DateTime.Now = {15/14/04 05:20:18 AM}
DateTime.UtcNow = {15/14/04 12:20:18 PM}
Run Code Online (Sandbox Code Playgroud)

但我目前的本地系统时间是:

15/14/04 04:50:18 AM
Run Code Online (Sandbox Code Playgroud)

我的时区是德黑兰(UTC + 03:30).

这是我第一次看到这种行为!为什么不DateTime.Now等于我的电脑时间?

在此输入图像描述

Amr*_*rhy 9

确保你没有在代码中的某个地方操作时区,或者在System.Globalization.CultureInfo中玩.
尝试在System.Globalization.CultureInfo的所有源代码中搜索它可能是某个地方,也可能是时区被缓存在某处所以试图调用 System.Globalization.CultureInfo.CurrentCulture.ClearCachedData()之前DateTime.Now

.NET DateTime.Now返回时区更改时的错误时间

  • 我纠正了.即使文化和时区不相关,也可以在[CultureInfo.ClearCachedData`的源代码中看到]链接(http://referencesource.microsoft.com/#mscorlib/system/globalization/cultureinfo.cs ,1373):在第1373行,有一个调用`TimeZone.ResetTimeZone()`所以重置当前文化**也**重置当前时区信息. (2认同)

Cod*_*ter 5

您的时区是UTC +03:30,但由于夏令时它是+4:30.这意味着,当你的时钟确定时DateTime.UtcNow = {15/14/04 12:20:18 PM},它就04:50:18 AM在你的时区.

因此,您DateTime.Now不会确认机器的日期时间设置,使其返回的值与您的时钟不匹配.

至于为什么接受的答案可以解释为什么可以通过DateTime.Now使用TimeZoneInfo类来计算UTC的本地时间(使用时区和夏令时),但我不知道为什么这可能会失去同步.你永远不会回收你的应用程序池,永远不会关闭你的机器?;)

System.Globalization.CultureInfo.CurrentCulture.ClearCachedData()因为它打电话TimeZone.ResetTimeZone()和工作TimeZoneInfo.ClearCachedData().

  • 文化与时区无关.文化决定了如何根据文化格式化日期,时间和数字.时区根据您在地球上的位置确定时间,同一时区可以有许多不同的文化,反之亦然. (2认同)