TimeZoneInfo.ConvertTime问题:错过了夏令时开关

时间:2010-03-27 20:36:18

标签: datetime .net-3.5

我的网络应用程序在.Net 3.5上运行,所有日期都以UTC时间(而非用户时间)保存在数据库中。

当我想显示日期时,我将其转换为用户日期(来自UTC)

    //Get the current datetime of the user      exp: GMT TO ISRAEL +2
    public static DateTime GetUserDateTime(DateTime dateUTC)
    {
        string userTzId = "Israel Standard Time";
        TimeZoneInfo userTZ = TimeZoneInfo.FindSystemTimeZoneById(userTzId);

        dateUTC = DateTime.SpecifyKind(dateUTC, DateTimeKind.Utc);
        DateTime ret = TimeZoneInfo.ConvertTime(dateUTC, TimeZoneInfo.Utc, userTZ);
        return ret;
   }

直到现在它工作正常,但我有以色列用户(GMT +2),以色列在26/3/10切换到夏令时,所以现在是(GMT +3)。

由于某种原因,TimeZoneInfo.ConvertTime不知道夏令时开关是在26/3/10,所以它仍然转换为GMT +2。

奇怪的是,在localhost上工作正常,我设置了一个测试页面:

 DateTime userdate = GetUserDateTime(DateTime.UtcNow);
string str2 = "UserDateTime  = " + userdate.ToString("dd/MM/yy") + "  " + userdate.ToString("HH:mm");

在服务器上(Windows 2003设置为UTC时间),它显示错误的时间(+2):

UserDateTime = 27/03/10 21:38

在localhost(Windows XP设置为以色列时间)上显示正确的时间(+3):

UserDateTime = 27/03/10 22:38

如何更新以色列夏令时转换时间为26/3/10的TimeZoneInfo?

感谢。

2 个答案:

答案 0 :(得分:1)

嗯,以色列是重要的。我在某处读过DST的开始和结束日期是每年决定的,通常是在以色列议会经过漫长而激烈的辩论之后。要求Microsoft为Windows发布更新,以便可以更新注册表。

是在这台机器上完成的吗?

相关的注册表项是HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones \ Israel Standard Time \ Dynamic DST。我那里有很多日期。这是一个Vista + Win7功能,不确定XP上会发生什么。更新可能需要处理它。在superuser.com上提出更多相关问题

答案 1 :(得分:0)

以色列的daylisghtsave日期现在每年都是一样的。 XP需要一个KB补丁来处理以色列,但Vista和7在这方面应该没问题。