TimeZoneInfo.ConvertTimeToUtc vs TimeZone.ToUniversalTime vs DateTime.ToUniversalTime

时间:2015-07-04 11:43:42

标签: c# datetime timezone

来自https://msdn.microsoft.com/en-us/library/bb397769(v=vs.110).aspx

  

TimeZoneInfo.ConvertTimeToUtc(DateTime)方法不一定产生与TimeZone.ToUniversalTime和DateTime.ToUniversalTime方法相同的结果。如果主机系统的本地时区包含多个调整规则,则TimeZoneInfo.ConvertTimeToUtc(DateTime)会将适当的规则应用于特定日期和时间。其他两种方法始终应用最新的调整规则。

有人可以更清楚地解释一下这个问题,最好是举例说明吗?

1 个答案:

答案 0 :(得分:3)

"多项调整规则"适用于不同年份的不同规则。相当常见的夏令时规则是经常改变的政治决策。 TimeZone类仅应用当前规则,甚至应用于历史日期。 TimeZoneInfo可以了解过去生效的规则。

这最终取决于跟踪这些规则的数据库。您可以查看它,在Windows上启动Regedit.exe并导航到HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones。以色列标准时间"关键是一个有趣的偷看,他们的规则不断变化。请注意Dynamic DST键中列出的年份。与Wikipedia article相比较,并注意到它没有完成,你会看到2004年之前的混乱。正如文章所述,微软放弃了试图保持准确一段时间。

通常,计算机需要启用Windows Update才能可靠地跟踪规则更改。