Проблема с TimeZoneInfo.ConvertTime: пропущен переключатель перехода на летнее время - PullRequest
0 голосов
/ 27 марта 2010

Мое веб-приложение работает в .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?

Спасибо.

Ответы [ 2 ]

1 голос
/ 27 марта 2010

Ну, Израиль значительный. Я где-то читал, что даты начала и окончания летнего времени выбирались каждый год, часто после долгих и ожесточенных дебатов в Кнессете. Требование от Microsoft выпустить обновление для Windows, чтобы реестр мог обновляться.

Это было сделано на этой машине?

Соответствующий раздел реестра: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Часовые пояса \ Стандартное время Израиля \ Динамическое летнее время. У меня там огромный список дат. Это функция Vista + Win7, не знаю, что происходит в XP. Обновление, вероятно, должно позаботиться об этом. Задайте больше вопросов об этом на superuser.com

0 голосов
/ 28 марта 2010

Дата выхода в свет в Израиле теперь одинакова каждый год.XP требует исправления KB для обработки Израиля, но Vista и 7 должны подойти в этом отношении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...