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

时间:2015-04-14 12:51:14

标签: c# asp.net visual-studio datetime

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

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

DateTime.Now = {15/14/04 05:20:18 AM}
DateTime.UtcNow = {15/14/04 12:20:18 PM}

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

15/14/04 04:50:18 AM

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

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

enter image description here

2 个答案:

答案 0 :(得分:7)

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

.NET DateTime.Now returns incorrect time when time zone is changed

答案 1 :(得分: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()