TimeZoneInfo和IIS

时间:2011-10-29 05:23:36

标签: .net timezone

我使用以下功能将日期时间从UTC转换为我当地时间(West Australian Standard,+ 8 GMT)。

var waTimeZone = TimeZoneInfo.FindSystemTimeZoneById("W. Australia Standard Time");
var timeInWA = TimeZoneInfo.ConvertTime(utcDateTime, TimeZoneInfo.Utc, waTimeZone);

但是,对于生产服务器中的某些日期时间,此代码的启动行为不正确。

E.g

如果我转换31/10/2011 00:00 - > 31/10/2011 09:00而不是31/10/2011 08:00。

如果我转换01/10/2011 00:00 - > 01/10/2011 08:00这是正确的。

这段代码在制作完成后已经运行了一段时间,我们几天前注意到了这一点。服务器设置为GMT +8,但我认为这不会影响这段代码。

同样的代码在其他服务器和本地机器上运行良好。

有人可以提供一些可能导致这种行为改变的想法吗? Windows更新? IIS配置更改? .Net bug?等...

更新: 我检查了更多信息,正如Yahia建议的那样。结果正在进行测试。

waTimeZone.IsDaylightSavingTime(date) --> False

waTimeZone.GetUtcOffset(date) --> 08:00:00

但我仍然得到+9小时而不是+8的错误转换。所以.Net在这里有些不一致。

但是,我检查了服务器的注册表项,提供了错误的转换,本地计算机为我提供了正确的答案,这很有意思。 Registry Comparison

我认为我们的IT人员尚未将DST补丁更新到服务器。

更新:确认IT人员在其DST补丁安装中错过了此服务器。这是造成这种行为的根本原因。

1 个答案:

答案 0 :(得分:3)

我怀疑您列出的日期/时间在夏令时方面有所不同 - 为了确保确实如此,请检查以下两个值和waTimeZone

据我所知,澳大利亚的部分地区不再有DST(2009年DST结束 - 请参阅WA政府链接http://wa.gov.au/daylightsaving/)。 您看到的不是错误,而是您错过了适用于服务器的某些操作

对于MS Windows,您需要采取一些措施来适应这一变化 - 请参阅http://technet.microsoft.com/en-au/bb821275.aspx