Неправильное время, отображаемое в 64-разрядных версиях Windows 7 или Windows Server 2008 R2 после обновления на месте

Эта статья поможет устранить проблему, из-за которой время, отображаемое на затронутых компьютерах, не совпадает с текущим локальным временем после обновления на месте до 64-разрядной версии Windows 7 или Windows Server 2008 R2.

Область применения: Windows 10 — все выпуски, Windows Server 2012 R2
Исходный номер базы знаний: 2001086

Симптомы

Рассмотрим следующий сценарий.

  • Вы устанавливаете 64-разрядную версию Windows Vista, Windows 7 или Windows Server 2008 R2.

  • Для этого часового пояса устанавливается стандартное время в Израиле. В Windows Vista отображается как (GMT+02:00) Иерусалим. В Windows 7 и Windows Server 2008 R2 отображается как (UTC+02:00) Иерусалим.

  • Вы выполняете обновление на месте до 64-разрядной версии Windows 7 или Windows Server 2008 R2.

    Ожидаемое поведение:

    После обновления параметр часового пояса настроен правильно, и такие функции, как динамическое DST, продолжают работать.

    Наблюдаемое поведение:

    После обновления текущий часовой пояс не может быть распознана API GetDynamicTimeZoneInformation(). Без вмешательства пользователя, чтобы исправить это, динамическое DST не работает, и компьютер не настраивается на DST в правильные даты в ближайшие годы. Таким образом, время, отображаемое на затронутых компьютерах, не соответствует текущему местному времени.

    При возникновении этой проблемы пользователи не получают уведомления об ошибке.

Дополнительная проблема с Windows Server 2008 R2

На серверах Windows Server 2008 R2 невозможно изменить параметр часового пояса, и появляется следующее сообщение об ошибке:

Текущий часовой пояс не распознается. Выберите допустимый часовой пояс.

Причина

Параметр реестра TimeZoneKeyName определяется как тип данных 128 WCHAR REG_SZ. Если 128-й WCHAR в TimeZoneKeyName не является конечным значением NULL, процесс обновления системы (Offline.xml) добавляет в строку значение NULL. Это увеличивает его длину до 129 WCHAR. Так как в Windows есть буфер WHCAR 128, в котором хранятся эти данные, система не загружает измененную строку из реестра.

Эта проблема относится к обновлениям до 64-разрядной версии Windows 7 и Windows Server 2008 R2.

Дополнительная причина Windows Server 2008 R2

Отсутствуют разрешения на неработающих серверах для следующего подраздела реестра:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones и HKLM\System\CurrentControlSet\Control\TimeZoneInformation

Разрешение

На компьютерах с Windows Server 2008 R2 запустите элемент "Дата и время" в панель управления или на панели задач Windows. Если сообщение в окне часов указывает, что часовой пояс нераспознан, щелкните Изменить часовой пояс, проверьте параметр часового пояса и нажмите кнопку ОК. При этом будут восстановлены правильные значения в TimeZoneKeyName. На клиентах Windows 7 проверьте выбор часового пояса на этапе запуска запуска программы установки. Это восстановит параметр TimeZoneKeyName в реестре.

Примечание.

  • Операционная система Windows внутренне использует время UTC для операций, зависящих от времени. Отображаемое время, отображаемое на панели задач Windows или панель управления элементе, основано на времени UTC плюс или минус смещение регионального времени, исправленное для правил летнего времени на основе языкового пояса локальных компьютеров.
  • Эта ошибка не влияет на внутреннее системное время, используемое Windows. Это может привести к неправильному отображению времени.
  • При исправлении параметра времени в элементе даты и времени сначала убедитесь, что настроен правильный часовой пояс. Сделайте это перед внесением изменений в дату или час, чтобы не случайно настроить неправильное системное время.

Дополнительная информация

Динамическое DST

В некоторых странах и регионах даты DST различаются из года в год и не могут быть определены одним правилом. Таким образом, Windows включает функцию динамического DST, которая хранит правила для года в реестре. При изменении года текущие сведения о часовом поясе обновляются с использованием правильных данных DST за этот год.

Динамический DST зависит от следующего значения реестра, задаваемого в качестве имени ключа часового пояса, в котором находятся данные динамического DST (например, "Стандартное время Израиля"):

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\TimeZoneKeyName

Затрагиваются только часовые пояса с разными правилами для разных лет (динамическое DST). Это связано с тем, что значение реестра, указывающее, где хранятся эти годовые правила, повреждено. Если это значение отсутствует, данные сведений о часовом поясе не обновляются в течение следующего года. Это приводит к использованию правил летнего времени за прошлый год для вычисления местного времени. Сразу после обновления версии системы эта проблема не влияет на время отображения. Вы получите уведомление о нераспознанном часовом поясе, если щелкнуть часы на панели задач или открыть элемент Дата и время в панель управления.

Если часовой пояс не исправлен, будущие переходы на DST или из нее могут произойти в неправильное время. Это приведет к неправильному времени в системе или неправильному преобразованию между системным и локальным временем.

Могут быть затронуты все часовые пояса, но main влияние на установки операционной системы, настроенные для использования зон, содержащих динамические данные DST. Ниже перечислены часовые пояса, поддерживающие динамическое DST.

Аляскинское время (зима)
Арабское время (зима)
Аргентина (зима)
Атлантика (зима)
AUS Восточное время (зима)
Cen. Австралия (зима)
Центрально-бразильское время (зима)
Центральное время (зима)
E. Южной Америки (зима)
Восточное время (зима)
Египет (зима)
Гренландия (зима)
Иран (зима)
Израиль (зима)
Маврикий (зима)
Монтевидео (зима)
Марокко (зима)
Время Маунтин (зима)
Новозеландское время (зима)
Ньюфаундленд (зима)
Тихоокеанское время SA (зима)
Тихоокеанское время (зима)
Пакистан (зима)
Парагвай (зима)
Тасмания (зима)
Венесуэла (зима)
Ж. Австралия (зима)

Причина, по которой влияние в этом случае больше, заключается в том, что данные DST для часового пояса не могут быть обновлены в соответствии с правилами, которые должны действовать в течение данного года. Это может привести к переходу на DST или из нее в неправильное время в заданном часовом поясе. Это не проблема, если динамическое DST отсутствует в часовом поясе. Однако поврежденные данные реестра приводят к сбою любого вызова GetDynamicTimeZoneInformation(), независимо от того, поддерживает ли часовой пояс динамическое DST.