【问题标题】:Why DateTime.Now and DateTime.UtcNow Isn't My Current Local DateTime?为什么 DateTime.Now 和 DateTime.UtcNow 不是我当前的本地日期时间?
【发布时间】:2015-06-20 02:11:15
【问题描述】:

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

【问题讨论】:

  • 除非您有幸处于本初子午线,否则 UTCNow 永远不会等于您当地的时区。
  • 您的服务器位于哪个时区,因此 15/14/04 05:38:56 AM 本地时间是 15/14/04 12:39:15 PM UTC?一个偏移量为 7 小时 19 秒的?
  • 确保您的文化设置正确 - 检查Thread.CurrentThread.CurrentCulture
  • 我的时区是 (UTC+03:30) 德黑兰。
  • 请检查控制面板中窗口的日期和时间设置以及UTC设置。

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


【解决方案1】:

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

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

【讨论】:

  • 再次,正如我在另一条评论中所写:文化和时区不相关,因此摆弄CultureInfo 并不能解决时区问题。
  • 谢谢我的朋友。我把'System.Globalization.CultureInfo.CurrentCulture.ClearCachedData()'放在datetime.now之前,我的问题已经解决了:)所以thansks
  • 我的立场是正确的。尽管文化和时区不相关,但在source code for CultureInfo.ClearCachedData 中可以看到一个链接:在第 1373 行有一个对TimeZone.ResetTimeZone() 的调用,因此重置当前文化重置当前时区信息。
  • 你的链接太棒了!所以你说这不是一个好的解决方案吗?
【解决方案2】:

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

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

DateTime.Now 使用 TimeZoneInfo 类从 UTC 计算本地时间(使用时区和夏令时)可以解释为什么接受的答案有效,但我不知道 为什么 em> 可能会不同步。您是否从不回收您的应用程序池并且从不关闭您的机器? ;)

System.Globalization.CultureInfo.CurrentCulture.ClearCachedData() 有效,因为它调用了TimeZone.ResetTimeZone()TimeZoneInfo.ClearCachedData()

【讨论】:

  • 文化与时区无关。文化决定了如何根据文化来格式化日期、时间和数字。时区根据您在地球上的位置确定时间,同一时区可以有许多不同的文化,反之亦然。
  • @Martin 你完全正确。除了删除此答案之外,您还有什么建议?我发现 DateTime.Now and Culture/Timezone specificC#: Making sure DateTime.Now returns a GMT + 1 time 似乎相关,但没有关于“DateTime.Now 与机器设置不对应”原因的指针。
  • 我对这个问题没有很好的答案。也许有一些我们不知道的东西,但这对于理解这个问题非常重要,但是我认为我没有什么要补充的问题。
  • 感谢朋友的帮助。我跑了第一个答案,它起作用了:)
猜你喜欢
  • 2020-09-12
  • 2018-02-11
  • 2018-05-13
  • 2018-06-03
  • 2011-05-03
  • 2021-09-26
  • 2021-12-22
  • 2010-09-08
  • 2015-10-01
相关资源
最近更新 更多