Мое веб-приложение работает в .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
На локальном хосте (для Windows XP установлено время Израиля) отображается правильное время (+3):
UserDateTime = 27/03/10 22:38
Как я могу обновить TimeZoneInfo, чтобы переход на летнее время в Израиле был 26/3/10?
Спасибо.