Поделиться через


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

Эта статья помогает устранить проблему, из-за которой отображаемое время на затронутых компьютерах не совпадает с текущим локальным временем после обновления на месте до 64-разрядной версии Windows 7 или Windows Server 2008 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 имеет буфер 128 WHCAR, в котором хранятся эти данные, система не загружает измененную строку из реестра.

Эта проблема относится к обновлениям до 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 проверьте выбор часового пояса на этапе установки OOBE. При этом восстанавливается параметр TimeZoneKeyName в реестре.

Примечание.

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

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

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

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

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

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\TimeZoneKeyName

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

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

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

Аляскинское время (зима)
Багдадское время (зима)
Аргентинское время (зима)
Атлантическое время (зима)
Сиднейское время (зима)
Центральноавстралийское время (зима)
Центральная Бразилия (зима)
Центральное время США (зима)
Д. Южноамериканское восточное время (зима)
Восточное время США (зима)
Египетское время (зима)
Гренландское время (зима)
Иранское время (зима)
Израильское время (зима)
Маврикий (зима)
Монтевидео (зима)
Марокко (зима)
Горное время США (зима)
Новозеландское время (зима)
Ньюфаундленд (зима)
Южноамериканское тихоокеанское время (зима)
Тихоокеанское время США (зима)
Пакистан (зима)
Парагвай (зима)
Тасманийское время (зима)
Венесуэла (зима)
Ц. Западная Австралия (зима)

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