我们使用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
不等于我的电脑时间?
答案 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()
。