我的网络应用程序在.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?
感谢。
答案 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在这方面应该没问题。