Если вы работаете с несколькими операционными системами, то настройка всех систем для работы по UTC может быть, чтобы избежать проблем с временем.
Это позволит сохранять одинаковое время на всех системах, что упростит работу с файлами, сообщениями и другими данными, которые содержат временные метки.
Настройка Windows для работы по UTC может облегчить работу с переходом на летнее/зимнее время, а также помочь избежать проблем с часами реального времени на компьютере.
Настройка Windows для работы по UTC (Coordinated Universal Time) может быть полезна в нескольких случаях:
- Работа с множеством операционных систем: Если вы работаете с несколькими операционными системами на одном компьютере, то настройка всех операционных систем для работы по UTC может помочь, дабы избежать проблем со временем.
- Работа с серверами: Если вы работаете с серверами в разных часовых поясах, то использование UTC может помочь в синхронизации времени между серверами и избежании проблем с временными метками.
- Работа с программами, требующими UTC: Некоторые программы могут требовать работы с UTC, поэтому настройка Windows для работы по UTC может помочь в избежании проблем с этими программами.
- Облегчение работы с переходом на летнее/зимнее время: Если вы живете в регионе, где используется переход на летнее/зимнее время, настройка Windows для работы по UTC может облегчить работу с этим переходом и избежать проблем с временем.
- Избежание проблем с часами реального времени на компьютере: Некоторые компьютеры могут иметь проблемы с часами реального времени, которые могут вызывать сбои в работе операционной системы и программ. Настройка Windows для работы по UTC может помочь в избежании этих проблем.
В целом, использование UTC в качестве стандарта времени является рекомендованным подходом в современных компьютерных системах и приложениях. UTC является стандартом времени, используемым во всем мире, и его использование помогает в избежании проблем с временем, которые могут возникать при работе в различных часовых поясах.
Windows по умолчанию использует локальное время для отображения времени в интерфейсе пользователя и в системных файлах. Однако, если вам нужно настроить Windows для работы по UTC (Coordinated Universal Time), вы можете сделать это, выполнив следующие действия:
- Откройте редактор реестра, нажав клавиши Win+R и введя команду
regedit
. - В редакторе реестра перейдите к следующему ключу:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
. - Создайте новое значение с типом
DWORD
и названиемRealTimeIsUniversal
. - Дважды щелкните созданное значение
RealTimeIsUniversal
и установите значение 1. - Закройте редактор реестра.
- Измените часовой пояс в настройках Windows на UTC.
- Перезагрузите компьютер, чтобы изменения вступили в силу.
После этих действий Windows будет использовать UTC вместо локального времени для отображения времени в интерфейсе пользователя и в системных файлах. Обратите внимание, что изменение часового пояса на UTC может повлиять на работу некоторых программ, поэтому рекомендуется проконсультироваться с разработчиками программ, которые вы используете, перед изменением часового пояса.
Многие новые пользователи, которые только перешли на Linux с операционной системы Windows, и пока все еще запускают эту систему время от времени, сталкиваются с проблемой, что после загрузки Windows в Ubuntu сбивается время на несколько часов назад или вперед, затем после нескольких перезагрузок уже сложно понять какое сейчас время.
Все это происходит из-за различий формата хранения времени в этих операционных системах. И будет происходить при каждой перезагрузке, сколько бы вы ни устанавливали правильное время. Но эту проблему можно решить. И даже несколькими способами. В этой статье мы рассмотрим, как решить проблему сбивается время в Ubuntu и Windows.
Содержание статьи
- Почему так происходит?
- Настройка Windows для работы по UTC
- Настройка Linux для работы localtime
- Выводы
Почему так происходит?
Как я уже сказал, проблема в разных форматах хранения и восстановления времени. В компьютере есть два вида часов. Аппаратные — идут всегда, даже когда компьютер выключен и программные часы, встроенные в ядро. Когда компьютер включается значение аппаратных часов записывается в программные, и в дальнейшем операционная система берет время оттуда. Но Windows и Linux работают по-разному с этими двумя часами. Есть два способа работы:
- UTC — и аппаратные, и программные часы идут по Гринвичу. То есть часы дают универсальное время на нулевом часовом поясе. Например, если у вас часовой пояс GMT+3, Киев, то часы будут отставать на три часа. А уже пользователи локально прибавляют к этому времени поправку на часовой пояс, например, плюс +3. Каждый пользователь добавляет нужную ему поправку. Так делается на серверах, чтобы каждый пользователь мог получить правильное для своего часового пояса время.
- localtime — в этом варианте аппаратные часы тоже идут по Гринвичу, но програмные часы идут по времени локального часового пояса. Для пользователя разницы никакой нет, все равно нужно добавлять поправку на свой часовой пояс. Но при загрузке и синхронизации времени Windows вычитает из аппаратного времени 3 часа (или другую поправку на часовой пояс), чтобы программное время было верным.
Так почему же сбивается время Ubuntu и Windows? Вот, допустим, работает Windows, и со временем там все нормально, оно сохранено в формате localtime. Но при перезагрузке в Linux, операционная система берет время Localtime, и думает что это UTC. Таким образом, пользователь будет брать уже правильное время, и прибавлять к нему поправку на часовой пояс. Поэтому время уже будет неверным.
Дальше вы исправили время, и теперь аппаратные часы работают в UTC. Но затем грузите WIndows. Система думает, что это localtime и для установки правильного программного времени добавляет к аппаратному поправку на часовой пояс, например, в нашем случае +3. Дальше каждый пользователь еще раз применяет эту поправку и время уже сбито, опять.
Единственно верный способ решить эту проблему — заставить обе системы работать по одному формату и сделать это совсем несложно. Причем можно пойти двумя путями: либо заставить Windows работать по UTC, либо Linux по формату localtime, что является не совсем правильным, но вполне возможно. Итак перейдем к решению проблемы сбивается время в Ubuntu.
Настройка Windows для работы по UTC
Итак, если у вас сбивается время Windows и Linux при переключении между операционными системами, лучшим способом будет заставить Windows работать по более правильному и логичному формату. Для этого достаточно добавить один ключ реестра. Вы можете сделать это с помощью одной команды в консоли. Чтобы открыть консоль в Windows 10 проведите мышь в левый нижний угол, затем нажмите правую кнопку. В контекстном меню выберите Командная строка (администратор):
Дальше наберите команду для 32 битных систем:
> Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
А для 64-битных, нужно использовать тип значения REG_QWORD:
> Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_QWORD /d 1
Почти готово, но служба времени Windows независимо от этой настройки будет писать время в местном формате при обновлении его через интернет, поэтому удобно эту службу отключить. Для этого выполните:
> sc config w32time start= disabled
Как вернуть обратно?
Если вы хотите вернуть все как было, то сделать это можно проще простого. Сначала возвращаем ключ реестра в правильное положение:
> Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 0
И запускаем обратно службу синхронизации:
> sc config w32time start= demand
Готово, а дальше рассмотрим, как заставить Linux использовать формат времени localtime.
Настройка Linux для работы localtime
По умолчанию Linux использует формат хранения времени UTC, но если Ubuntu сбивает время Windows, вы можете очень просто заставить систему хранить в аппаратном таймере местное время. Во всех дистрибутивах, использующих Systemd, в том числе в Ubuntu для этого достаточно выполнить команду:
sudo timedatectl set-local-rtc 1 --adjust-system-clock
Чтобы посмотреть текущее состояние аппаратных и программных часов выполните:
sudo timedatectl
Готово, теперь вы можете перезапустить компьютер и запустить Windows, чтобы убедиться, что время не сбивается при перезагрузке. В более старых системах Ubuntu, вам нужно отредактировать файл /etc/default/rcS и заменить UTC=yes на UTC=no. Вы можете сделать это командой:
sudo sed -i 's/UTC=yes/UTC=no/' /etc/default/rcS
Как вернуть обратно?
Опять же, вернуть все как было можно с помощью одной команды:
sudo timedatectl set-local-rtc 0
А в старых дистрибутивах Ubuntu:
sudo sed -i 's/UTC=no/UTC=yes/' /etc/default/rcS
Выводы
Вот и все. Теперь, если вы столкнетесь с проблемой Windows 10 — сбивается время Ubuntu или любом другом Linux дистрибутиве, вы уже будете знать, как её решить с помощью двух полностью работающих способов. Если у вас остались вопросы, спрашивайте в комментариях!
Мы разобрались, как настроить правильное время в Ubuntu и Windows, чтобы временные зоны не сбивались, но что такое временные зоны и зачем они нужны, на завершение видео про это:
- Компьютеры
- IT
- Cancel
Эту операцию необходимо провести всем дуалбутчикам к которым с недавнего времени отношусь и я. В противном случае у вас при перезагрузке в Windows будет показываться совершенно непонятное смещение времени.
В реестре необходимо создать или изменить параметр:
[HKEY_LOCAL_MACHINE\SYSTEM\CurentControl
«RealTimeIsUniversal»=dword:00000001
Ну, а кому сейчас легко
Многие новички Linux оставляют у себя на компьютере второй запасной операционной системой Windows. Но при переходе то в одну, то во вторую систему наблюдается неприятный момент — время начинает «убегать» на несколько часов то вперед, то назад. Это происходит потому, что Linux и Window хранят время в разных форматах.
В компьютере используется два вида часов. Первые — аппаратные часы, которые идут всегда, даже тогда, когда компьютер выключен (питаются от батарейки на материнской плате компьютера). Вторые часы — программные. Вот именно этими часами пользуется операционная система. При включении компьютера первоначальное время берется из аппаратных часов и записывается в программные часы. И вся проблема как раз в том, что разные операционные системы по-разному работают с программными часами. Есть два варианта работы:
- UTC — аппаратные и программные часы идут по Гринвичу. И эти часы дают универсальное время с нулевым смещением (нулевой часовой пояс). А уже локально к этому времени прибавляется ваш часовой пояс (с плюсом или минусом). Чаще всего так время идет на серверах, с которыми потом синхронизируются рабочие станции пользователей и уже локально у всех пользователей происходит поправка на их часовой пояс.
- Localtime — в данном случае программные часы тоже идут по Гринвичу, а вот аппаратные часы идут по времени локального часового пояса. Пользователь особой разницы не заметит, т.к. все равно нужно добавлять или вычитать поправку на свой часовой пояс. И вот тут появляется проблема. Windows при загрузке и(или) синхронизации времени делает поправку на часовой пояс пользователя для того, чтобы программное время было верным. В Linux не так.
Именно поэтому, при каждой перезагрузке из одной системы в другую будет происходить смещение времени на величину поправки на часовой пояс. И единственный способ это устранить — это заставить обе системы (и Windows, и Linux) работать со временем в одном формате. Сделать это можно двумя путями:
- Заставить Windows работать по UTC, как Linux;
- Заставить Linux работать в формате localtime.
Переключение Windows на работу по UTC
Для решения проблемы сбивающегося времени достаточно добавить всего один ключ в реестр Windows. Это можно сделать с помощью ввода команды в консоли.
Чтобы открыть консоль от имени администратора в Windows 10 нужно поставить курсор мыши в левый нижний угол экрана и нажать правую кнопку мыши. В появившемся контекстном меню нужно выбрать «Командная строка (администратор)».
Для 32-х битной Windows вводим (это одна команда, вводится в одну строку):
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
Для 64-х битных нужно ввести (это одна команда, вводится в одну строку):
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_QWORD /d 1
Однако, это еще не все. Служба времени Windows все равно продолжит сохранять время в старом формате при его обновлении через Интернет. Поэтому, службу нужно отключить. Либо это сделать руками через «Панель управления» Windows, либо быстрее и проще в той же командной строке, запущенной от имени администратора, выполнить:
sc config w32time start=disabled
Как вернуть настройки времени в Windows обратно?
В командной строке, запущенной от имени администратора, выполняем (это одна команда, вводится в одну строку):
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 0
и запускаем службу синхронизации времени Windows:
sc config w32time start=demand
Перевод Linux на работу с Localtime
По умолчанию Linux хранит временя в формате UTC, но можно переключить систему так, чтобы она хранила в аппаратном таймере местное время. Рассмотрим на примере Ubuntu-Linux (работает даже в старых версиях, например в 16.04).
Чтобы посмотреть текущее состояние аппаратных и программных часов, нужно выполнить:
timedatectl
Начнем исправлять проблему сбивающихся часов. Для этого выполняем команду:
sudo timedatectl set-local-rtc 1 --adjust-system-clock
Готово! Еще проще, чем в Winsdows!
Однако, в более старых Ubuntu придется отредактировать файл /etc/default/rcS, внутри которого заменить UTC=yes на UTC=no.
Как вернуть настройки времени в Linux обратно?
Вернуть все как было можно с помощью команды:
sudo timedatectl set-local-rtc 0
И в старых дистрибутивах Ubuntu поправить файл /etc/default/rcS, внутри которого заменить UTC=no на UTC=yes.
На этом проблема сбивающегося времени в Windows и Linux (любой дистрибутив, не обязательно Ubuntu) решена.
Чтобы на вашем устройстве Windows показывалось правильное время, часовой пояс (time zone) на нем должен соответствовать географическому расположению компьютера. В этой статье мы рассмотрим, как задать часовой пояс в Windows из панели управления, из командной стоки, PowerShell и через групповые политики.
Содержание:
- Настройка часового пояса через панель управления Windows
- Изменить часовой пояс из командной строки с помощью TZutil
- Управление часовым поясом в Windows из PowerShell
- Настройка часового пояса Windows через GPO
Настройка часового пояса через панель управления Windows
Начиная с Windows 10 и Windows Server 2016 для настройки времени часового пояса в Windows используется отдельный раздел в панели Параметры/Settings. Выполните команду
ms-settings:dateandtime
или щелкните по значку часов в системном трее и выберите пункт Adjust date/time (Настройка времени и даты).
По умолчанию Windows пытается автоматически синхронизировать время и выбрать часовой пояс (включена опция Set time zone automatically/Автоматически устанавливать часовой пояс).
Чтобы выбрать часовой пояс вручную, нужно отключить эту опцию и выбрать пояс в выпадающем списке.
Также для управления часовым поясом можно использовать классическое окно настройки времени в Windows (команда
timedate.cpl
).
При попытке изменить часовой пояс в Windows Server 2019 и 2022 под администратором из панели управления появляется ошибка:
Date and time Unable to continue. You do not have permission to perform this task. Please contact your computer administrator for help.
Продолжение невозможно. У вас нет разрешения на выполнение этой задачи. Обратитесь за помощью к сетевому администратору.
Чтобы решить эту проблему, проверьте что у вашей учетной записи есть права на смену часового пояса. Откройте редактор локальной групповой политики (
gpedit.msc
), перейти в раздел Computer Configuration -> Windows Settings -> Security Settings -> Local Policiers -> User Rights Assignment и добавить встроенную группу Administrators в параметр Change the time zone.
После обновления настроек GPO запустите командную строку с правами администратора (!!!), выполните команду
timedate.cpl
и вы сможете изменить часовой пояс. Либо в качестве обходного решения вы можете изменить часовой пояс из командной строки.
Изменить часовой пояс из командной строки с помощью TZutil
Для управления часовым поясом в Windows можно использовать встроенную утилиту
tzutil.exe
(Windows Time Zone Utility).
Вывести идентификатор текущего часового пояса (TimeZoneID):
tzutil /g
Russian Standard Time
Выведите список всех часовых поясов с их параметрами и названиями:
tzutil /l
Если вам нужно быстро найти вывести все часовые пояса, с определенным с сдвигом, например UTC +2, выполните команду:
tzutil /l | find /I "utc+02"
Чтобы изменить текущий часовой часовой пояс (UTC+03:00) Москва, Санкт-Петербург, Волгоград – (Russian Standard Time) на (UTC+04:00) Ижевск, Самара (Russia Time Zone 3), выполните команду:
tzutil /s "Russia Time Zone 3"
Текущий часовой пояс хранится в следующей ветке реестра:
reg query HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
Если в часовом поясе предусмотрен переход на летнее время, его можно отключить. Для этого нужно указать идентификатор часового пояса с суффиксом _dstoff:
tzutil /s "Pacific Standard Time_dstoff"
Эта команда изменит часовой пояс компьютера и отключите сезонный перевод часов.
Настройки часового пояса и сезонного перевод часов можно вывести так:
w32tm /tz
Часовой пояс: Текущий:TIME_ZONE_ID_UNKNOWN Сдвиг: -180мин (UTC=LocalTime+Bias)
[Зимнее время:"RTZ 2 (зима)" Сдвиг:0мин Дата:(не указано)]
[Летнее время:"RTZ 2 (лето)" Сдвиг:-60мин Дата:(не указано)]
Управление часовым поясом в Windows из PowerShell
Чтобы узнать текущий часовой пояс Windows из PowerShell, выполните команду:
Get-TimeZone
Id : Ekaterinburg Standard Time DisplayName : (UTC+05:00) Екатеринбург StandardName : RTZ 4 (зима) DaylightName : RTZ 4 (лето) BaseUtcOffset : 05:00:00 SupportsDaylightSavingTime : True
Вывести доступные часовые пояса:
Get-TimeZone -ListAvailable
Для поиска в списке часовых поясов воспользуйтесь фильтром:
Get-TimeZone -ListAvailable | Where-Object {$_.displayname -like "*Samara*"}
Изменить часовой пояс:
Set-TimeZone -Name "Astrakhan Standard Time"
Или
Get-TimeZone -ListAvailable|? DisplayName -like "*Moscow*"|Set-TimeZone
Удаленно получить список часовых поясов на серверах Windows (список в txt файле):
$servers = get-content C:\servers.txt
Get-WMIObject -Class Win32_TimeZone -Computer $servers | select-Object PSComputerName, Caption
Изменить часовой пояс на списке серверов Windows:
$servers = get-content C:\servers.txt
Invoke-Command -ComputerName $servers -Command {Set-TimeZone "West Asia Standard Time"}
В этих примерах используется версия PowerShell 5.1, но они также работают и в более новых версиях.
Настройка часового пояса Windows через GPO
Для централизованной настройки часового пояса на компьютерах в домене Active Directory вы можете использовать групповые политики. Готовой политики для настройки часового пояса в GPO нет. Чаще всего используются следующие два варианта настройки часового пояса через GPO: с помощью logon скрипта GPO и с помощью импорта настроек часового пояса в реестр.
Для задания часового пояса через логон скрипт GPO, можете использовать простейший PowerShell скрипт (подходит для всех версий Windows):
$tmZone = "Russian Standard Time"
$WinOSVerReg = Get-Item "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
$WinOSVer = $WinOSVerReg.GetValue("CurrentVersion")
if ($WinOSVer -GE 6){
tzutil.exe /s $tmZone
} Else {
$param = "/c Start `"Change tmZone`" /MIN %WINDIR%\System32\Control.exe TIMEDATE.CPL,,/Z "
$param += $tmZone
$proc = [System.Diagnostics.Process]::Start( "CMD.exe", $param )
}
Другой способ настроек времени заключается в импорте содержимого ветки HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation с эталонного компьютера с настроенным временем на другие компьютеры через GPO. Процедура импорта ветки реестра через Group Policy Preferences описана в этой статье.
Выберите эту ветку целиком с помощью Registry Browser. В результате все настройки временной зоны будут импортированы в раздел редактора GPO (Computer Configuration -> Preferences -> Windows Settings -> Registry).
Если вы хотите использовать разные настройки временных зон для разных сайтов Acrive Directory, воспользуйтесь GPP Item Level Targeting. Привяжите настройки часового пояса к нужному сайту.
Если вы используете терминальные фермы RDS серверов, и пользователи и сервера RDSH находятся в разных часовых поясах, то в RDP сессий у пользователя будет отображаться некорректное время. Чтобы перенаправить локальный часовой пояс пользователя в RDP сессию, включите параметр GPO Allow time zone redirection (Computer Configuration > Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Device and Resource Redirection.