Часовой пояс. Настройка в реестре. Time Zones.
Что сделать, чтобы нормализовать часовой пояс на компьютере.
Сколько помню работу за компьютером - одной из распространенных проблем является дата и время компьютера ... То - села батарейка в биос и время слетело ... То - надо переустановить дату, чтобы просроченная программа заработала ... То - проблема миллениум 2000 ... То - зимнее время ... То - летнее ... То - ошибка безопасности сайта, потому-что время на компьютере установлено неверно и безопасные HTTPS протоколы - просрочивают сертификаты безопасности ... Заколебало ... Еще и реальная тайм зона +5 - а в настройках указано +6 ... Постоянно норовят на это тыкнуть ... Где и как исправить эту проблему ? ...
Интересная статья, чтобы освежить
... Исправление часовых поясов Windows ... Хочу сделать именно это, и чтобы коррекция времени - соответствовала моему региону, а не какому-то за 5 тысяч километров ...
По полученной информации - нашел ветку в реестре Windows 7, где прописана временная зона HKEY_LOCAL_MACHINE - SOFTWARE - Microsoft - Windows NT - CurrentVersion - Time Zones - Russian Standard Time ... Настройки - достаточно примитивные, кроме одного значения - TZI ... Что это за хрень в 16 hex формате - пока совершенно неясно ... Неизвестно, требуется ли ее исправлять или можно оставить ? ...
Сравниваю разные даты для коррекции часового пояса +01:00 ...Сокращаю значения для удобства восприятия различий ...
TZI=hex : c4,ff,00,c4,ff,00,0a,00,05,00,03,00,\00,03,00,05,00,02,00 - Центральная Европа
TZI=hex : c4,ff,00,c4,ff,00,0a,00,05,00,03,00,\00,03,00,05,00,02,00 - Центральноевропейский
TZI=hex : c4,ff,00,c4,ff,00,04,00,01,00,02,00,\00,09,00,01,00,02,00 - Намибийское время
Разница - есть и надо понять, о чем сообщает эта строка ...
... Определяет настройки для часового пояса ...
BIAS - обязательная запись ... Текущее смещение (offset) для поправки местного времени на компьютере, в минутах ... Смещение - это разница в минутах между всемирным координированным временем (UTC) и местным временем ... Все переводы между UTC и местным временем основаны на формуле :
UTC = местное время + смещение ...
StandardName = описание для стандартного времени ... Эта строка может быть пустой ...
StandardDate - структура, которая содержит дату и местное время, когда в этой операционной системе происходит переход с летнего времени на стандартное время и настройки перехода ...
StandardBias - значение смещения, которое будет использоваться во время местных переводов времени, которые происходят в течение стандартного времени ... Этот элемент игнорируется, если значение для элемента StandardDate не указано ... В большинстве часовых поясов значение этого параметра равно нулю ...
DaylightName - описание для летнего времени ... Например, PDT - может указывать на тихоокеанское летнее время ... Эта строка может быть пустой ...
DaylightDate - структура, которая содержит дату и местное время, когда в этой операционной системе происходит переход от стандартного времени к летнему времени ... Поведение аналогично StandardDate ...
DaylightBias - значение смещения, которое будет использоваться во время перевода местного времени, которое происходит в летнее время ... Этот элемент игнорируется, если не указано значение для элемента DaylightDate ... В большинстве часовых поясов значение этого члена равно –60 ...
Каждая запись о часовом поясе включает следующие значения реестра ...
Dlt - Описание для летнего времени ... = Уральское время (лето) ...
MUI_Display - Отображаемое имя в виде строки вида ... = @tzres.dll,-1530 ...
MUI_Dlt - Описание для летнего времени в виде строки вида ... = @tzres.dll,-471 ...
MUI_Std ... Описание для стандартного времени в виде строки вида ... = @tzres.dll,-472 ...
Std - Описание для стандартного времени ... = Уральское время (зима) ...
TZI - Следующая информация о часовом поясе ... Определено, как функция, включая структуры
LONG (Bias ; StandardBias ; DaylightBias) и SYSTEMTIME (StandardDate ; DaylightDate) ...
Ясно, но - непонятно ... Сразу возникают вопросы : в записи реестра содержится обратная косая черта - бэкслеш \ ... Тогда я немного почистил весь код ветви часовой зоны реестра, чтобы попытаться понять структуру кодирования ... После слэш - могут быть 00, поэтому вторая часть кода - не учитывалась ... Сразу же возникает другой вопрос : если время UTC 00:00 - одно - зачем его кодировать четырьмя различными способами ??? ...
Display=(UTC) TZI=hex:00,\ ...
Display=(UTC) TZI=hex:00,c4,ff,00,\ ...
Display=(UTC) TZI=hex:00,c4,ff,00,0a,00,05,00,02,00,\ ...
Display=(UTC) TZI=hex:00,c4,ff,00,0a,00,05,00,03,00,\ ...
Потому-что в окне выбора пояса системных настроек даты и времени - тоже указаны четыре варианта ... Время в формате UTC, Лондон, Касабланка и Рейкьявик ... Расположенные на квадрате Земли, со стороной в 4 тысячи километров ...
По порядку следования часовых поясов - коды значений перепутаны не логически ... Видимо есть какая-то таблица перекодировки, но я не углублялся ... Меня интересует переставить часовой пояс для Екатеринбурга - с +06:00 на +05:00 ... Записи сокращены, я ищу только общие моменты совпадения ...
Display = (UTC+05:00) TZI = hex : d4,fe,ff,00,c4,ff,00,\
Display = (UTC+06:00) TZI = hex : 98,fe,ff,00,c4,ff,00,\
... Отличие в первом байте ... Надо сравнить полные версии кодов ...
Чаще сбивается не само компьютерное время (процессорные тики) а, именно - автонастройки в соответствии с записями реестров ... По этой же причине (запрет модификации времени, несоответствие часового пояса) - автокоррекция через интернет, тоже - отключена ... Хотя, между собой, компьютера общаются по единому времени (чтобы избегать сбоев операций) - пользователю подсовывают локальное время, в соответствии с его региональными настройками ...
Когда и при каких запросах отдается то одно, то другое время (по GPS, вышкам, провайдерам или серверам магистральных кабель-каналов выхода в интернет) - мне неизвестно ... Во время приема спутников - желательно установить часовой пояс UTC, чтобы не путаться и синхронизировать программы по времени ... Явно установленное время UTC - не отменяет региональной привязки и периодически всплывают сообщения о проблемах с настройкой часов и даты ... Поэтому имеет смысл сохранить оригинальные ключи реестра и модифицировать их в правильный часовой пояс Екатеринбурга, чтобы обеспечить в будущем возможность переключаться - по мере необходимости ...
При сохранении обнаружил и запись в другом формате : ...
Time Zones - Ekaterinburg Standard Time - Dynamic DST ...
2010=hex : d4,fe,ff,ff,00 ... То есть, когда-то, такая поправка - уже применялась ... А сколько раз дергали часы взад / вперед - я уже и не упомню ... Последнее время немного приостановились ...
... Определяет настройки для часового пояса и динамического летнего времени ... Примечание ... Динамическое летнее время обеспечивает поддержку часовых поясов, границы которых для летнего времени меняются из года в год ... Эта функция упрощает обновление систем, особенно в регионах, где годовые границы летнего времени известны заранее ... После обновления часового пояса ... текущая настройка часового пояса ... применяется ко всем часовым операциям, даже если рассматриваемое время произошло до того, как часовой пояс изменился ... Поэтому лучше всего хранить время в формате UTC и преобразовать их в текущий местный часовой пояс ... Можно установить даты перехода для текущего года, используя функцию SetDynamicTimeZoneInformation ... Чтобы установить будущие даты перехода, необходимо добавить записи в данные реестра ... Настройки для динамического летнего времени хранятся в реестре ...
Если переход зима / лето - разрешен, панель настроек даты / времени подсказывает : в ближайшее время перехода на летнее время или обратно не будет ... Для UTC - формулировка другая : переход на летнее время не поддерживается для этого часового пояса ... И в реестре для UTC ключ Dynamic DST - не прописан ... Значит его смело можно удалить ...
Итак ... Сохранил оригинальный reg ключ, сохранил снова под другим именем, открыл и отредактировал ... Заменил первые 12 байт ; строку Display на = (UTC+05:00) Екатеринбург ; удалил все строки записей Dynamic DST ... Дважды щелкнул мышью по файлу и применил правку реестра ... Ткнул по часам - настройка даты и времени, выбрал Екатеринбург - а он все равно +06:00 ))) ...
Перезагрузился - то же ... Еще раз проверил реестр - Time Zones больше нигде нет ... Есть TimeZoneInformation ... Если исправить записи MUI_*** на =@tzres.dll,0 - то в списке станет отображаться (UTC+05:00) Екатеринбург - но поправка все равно останется +06:00 ... Если заменить c4,ff,ff,ff на 00,00,00,00 - на первый взгляд ничего не произойдет, но и не поменяется ... Если заменить на нули d4,fe,ff,ff - запись, в списке часовых поясов окна настройки - поднимется вверх и встанет рядом с записями UTC, но поправка - не изменится ...
Так я и знал ... Эти записи берутся из @tzres.dll ... В свою очередь он может затрагивать файл локализации tzres.dll.mui - в котором и вшиты временные зоны ... Примечание : берутся, но - частично ...
MUI_Display = @tzres.dll,-1530 - это строчка = (UTC+06:00) Екатеринбург ...
Что еще меня сильно смутило, так это - почему не упоминается HKEY_LOCAL_MACHINE - SYSTEM - CurrentControlSet - Control - TimeZoneInformation ? ... Именно здесь прописывается текущая установка часового пояса - значения, которые нужно изменять ...
Bias = dword : fffffe98 ...
DaylightBias = dword : ffffffc4 ...
DaylightName = @tzres.dll,-471 ...
DaylightStart = hex : 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 ...
StandardBias = dword : 00000000 ...
StandardName = @tzres.dll,-472 ...
StandardStart = hex : 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 ...
TimeZoneKeyName = Ekaterinburg Standard Time ...
DynamicDaylightTimeDisabled = dword : 00000000 ...
ActiveTimeBias = dword : fffffe98 ...
Bias - обязательный параметр ...
Откуда берется это магическое число fffffe98 ? ...
Я тут уже прикинул, поэтому ...
Поправка часового пояса на 6 часов или 360 - 1 = 359 минут ...
DEC 359 в HEX = 167 ...
FFFFFFFF - 167 = FFFFFE98 ... Вот это и есть поправка ...
Ну и, конечно 98,fe,ff,ff - это не что иное, как - то же самое, только написано наоборот ...
Мне нужно на 5 часов ... 300 - 1 = 299 ... в HEX = 12B ...
FFFFFFFF - 12B = FFFFFED4 ...
Текущая ветвь реестра CurrentControlSet - будет влиять на настройки Windows - только после перезагрузки ... Но, тогда - вернуться (переустановятся) некоторые параметры из Time Zones - значит их также нужно модифицировать ... Чтобы изменять часовой пояс без перезагрузки компьютера - нужно делать это через : часы - настройка даты и времени - изменить часовой пояс ...
Как отредактировать часовой пояс в реестре.
Пошаговая инструкция по модификации поправки часового пояса редактированием в реестре, с картинками ... Картинки смотреть по ссылкам ...
1.1 Настройка для Екатеринбург +06:00 по умолчанию ... Ошибка в 1 час (-1) ... Дата и время. Выбор часового пояса. Стандартный оригинальный вид.
1.2 Текущее время компьютера и дополнительные часы ... Для сравнения и наблюдения ошибки ...
1.3 Екатеринбург стандартное время ... Реестр. Зона времени. Cтандартные настройки. Сохранить оба раздела (экспорт, *.reg) в свою папку с драйверами - Ekaterinburg Standard Time и Dynamic DST ... При этом последний, за ненадобностью (нет перехода смены времени зима / лето) - лучше сразу удалить из реестра, чтобы не мешался в будущем ... Кстати, в UTC - его тоже не будет ...
1.4 TZI ... Time Zone Information - пока повторяет выбранные настройки в реестре текущей информации о системе ... Эти настройки не имеет смысла сохранять - они будут перезаписаны при смене часового пояса ... Реестр. Текущие настройки. TZI - Time Zone Information.
1.5 Отредактировать реестр в блокноте - вручную ... (Дополнено в пункте 2.1) ... Найти и открыть в своей архивной папке драйверов - *.reg файл, который экспортировали из реестра ... Сохранить как - MOD - модификация ... Открыть и вручную исправить записи реестра в соответствии со своими требованиями и расчетами на калькуляторе (режим программиста, работа с DEC и HEX системами счисления) ... Сохранить изменения и двойным щелчком мыши по *mod.reg файлу - добавить данные в реестр, согласиться на модификацию ...
1.6 Реестр. Time Zones, вид после модификации ... Сейчас, после модификации и перезаписи реестра - ключи будут выглядеть - так ... Можно приступать к замене временного коридора ))) ...
1.7 В панели настроек отображение для выбранного города изменилось ... Чтобы реестр принял новые настройки - он должен перезаписать их (без перезагрузки) ... Зайти в Дата и Время, Выбрать UTC, принять ОК ... Можно и другой выбор ... Главное - чтобы система считала настройки из Time Zones и записала в TimeZoneInformation - без нашего участия, и приняла их за основные ... Изменить часовой пояс, выбрать свою модифицированную настройку и ОК ...
1.8 Реестр. TZI. Моды стали текущими настройками ... Все модификации оригинальных записей реестра без писка были приняты системой ... Осталось проверить, что показывает время на ПК ...
1.9 Часы на компьютере показывают правильно ... Правильно - для нас, но неправильно для всего остального мира ...
Вот как отреагирует онлайн сервис времени ... Обратите внимание - я изменил дополнительные часы, чтобы синхронизировать вид отображения с Яндекс Время ...
2.1 Сбилась коррекция часового пояса для других городов ... В результате манипуляций с реестром - где-то в цифровом коде электронных мозгов сбилась коррекция отображения часовой зоны для других городов, в частности - для Москвы (виесто UTC+03:00 стало +04:00) ... Думаю, проблема даже глубже - сбилась точка отсчета глобальных временных зон, от которой вычисляются поправки региональных часовых поясов ... Нельзя и невозможно нарушить только UTC, для которого поправка - всегда = 0 ... Но, по моему, сдвиг глобальной точки нулевого отсчета - повлиял и на региональные часовые пояса с привязкой к UTC (!!!) ...
Правка реестра повлияла на часовой пояс для других городов.
Одновременно вскрылась еще одна проблема : некоторые приложения вместо времени (или - пояса?) - стали писать в отчете : @tzres.dll,0 ... Нужно еще поиграться с ключами MUI, поэкспериментировать ... Проанализировав настройки реестра в пункте 1.5 - возникли два предположения ...
- Влияет ли перезагрузка и время BIOS на сбой текущего времени ? ... Нет ... Проверено ... Время в BIOS и текущие отображение в Windows - совпадают ... Сбоя - нет ... Время в БИОС - это количество секунд (или миллисекунд) с полуночи (00:00), которое изменяет сам владелец ПК ... При загрузке Windows учитывает записи реестра для региональных часов ... Но, сначала - Windows назначает текущее время БИОC - указанному в настройках региональному часовому поясу - как, относительная нулевая отметка отсчета ... Только тогда появляется возможность правильно отобразить UTC ( -5 ) или Пекин ( +3 ) ... Относительно текущего месторасположения и настроек ... Но, если изменить часовой пояс в Windows - время в BIOS тоже изменится - на величину поправки для выбранного пояса и станет новой относительной начальной точкой отсчета ... Потому-что часы реального времени в компьютере - одни, и им плевать, какой региональный часовой пояс вы выбираете ... Неважно, какая временная зона - время в БИОС всегда будет соответствовать показаниям часов в правом нижнем углу экрана ПК ... Сначала изменить пояс, затем установить дату / время ...
- Как правильно указать значения ключей MUI ...
# MUI_Display = @tzres.dll,-1530 ...
# MUI_Dlt = @tzres.dll,-471 ...
# MUI_Std = @tzres.dll,-472
Теперь - что касается значения MUI ключей реестра ... -1530 = эта надпись не нужна ... MUI_Dlt - это используется при смене часового пояса ; значение пустое или без разницы ... MUI_Std - стандартный вывод текущего времени в ответ на запросы программ ? ... Видимо именно это значение и надо прописать для всех остальных ... Счас проверю ... Нет, это фраза - Уральское время (зима) - и она нечитаемо отображается в DOS совместимых программах и утилитах ... Да - это просто текстовая фраза ... И зачем вообще вызывать DLL ? ... Достаточно прописать обычным текстом ...
MUI_Display = (UTC+05:00) Екатеринбург ... Приоритетно дублирует ключ Display ... Отображается в панели настройки ...
MUI_Dlt = (UTC+05:00) EKB ...
MUI_Std = (UTC+05:00) EKB ... Выводится по запросу программ ... В том числе - DOS, без поддержки Unicode ... Имеет ограничение на длину строки ... Наверно - можно и совсем кратко : UTC+05 EKB, UTC+5 EKB ... Или, просто EKB ... По английски, конечно, для совместимости ... И - в кавычках ...
Дополнительные часы - можно удалить или оставить для красоты ... Если нужно, чтобы их время отображалось правильно - следует повторить манипуляции с редактированием соответствующих настроек ... Тогда - есть смысл задуматься о глобальной переделке всей ветви реестра Time Zones и удалить ненужные записи, чтобы не мозолили глаза ))) ... Теперь можно переключаться в UTC и свой региональный временной диапазон - без проблем ... Ничего не должно сбиться, по крайней мере - до переустановки или обновления Windows, или смены языковой раскладки ...
P.S. c4,ff,ff,ff ... Может в этом коде кроется какой-то подвох ? ... Это я не смог выяснить ...
Раздел computer : список всех страниц ...