Многие новые пользователи, которые только перешли на 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, чтобы временные зоны не сбивались, но что такое временные зоны и зачем они нужны, на завершение видео про это:
Многие новички 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) решена.
Содержание
В старых версиях Ubuntu была проблема — системное время в Ubuntu и в других операционных системах, установленных на том же компьютере, различалось. Связано это было с тем, что Ubuntu считала системное время компьютера как время по UTC, и при выводе прибавляла к нему смещение текущего часового пояса, которое указал пользователь.
Настройка 14.04
Для того, чтоб переключиться на Windows-поведение необходимо поменять значение параметра «UTC» в конфигурационном файле /etc/default/rcS
на значение «no»
Для этого в терминале:
sudo nano /etc/default/rcS
В открывшемся файле изменяем значение чтобы было так:
UTC=no
Настройка 16.04
В 16.04 переключение локального/UTC времени теперь не в файле /etc/default/rcS, а в /etc/adjtime, со своим синтаксисом.
Если системные часы работают в локальном времени (как в windows):
sudo hwclock --localtime --adjust
Чтобы вернуть обратно:
sudo hwclock --utc --adjust
Еще один вариант настройки 16.04 (применимо и к 18.04)
Проверить состояние:
timedatectl | grep local
если в ответ
RTC in local TZ: no
То в Биосе время Гринвича (+0)
Если
RTC in local TZ: yes
То значит локальное (то есть что в Linux, то и в Биосе и так же будет в Windows).
Чтобы Линукс при выключении не переводил часы на «+0», делаем
timedatectl set-local-rtc 1
и если вдруг нужно будет вернуть все назад
timedatectl set-local-rtc 0
Quick Links
-
Make Linux Use Local Time to Fix Time Discrepancy
-
Make Windows Use UTC Time to Fix Time Errors
-
What About Dual-Booting Windows on a Mac?
-
Why Does Windows Use Local Time instead of UTC?
Summary
- Your computer’s hardware clock stores the time, even when the computer is off. Windows assumes local time, while Linux assumes UTC time, causing time discrepancies in dual boot situations.
- To make Linux use local time run «timedatectl set-local-rtc 1 —adjust-system-clock» in the Terminal.
- To make Windows use UTC, disable «Set Time Automatically» in the Settings App, or you can modify the registry.
Your computer stores the time in a hardware clock on its motherboard. The clock keeps track of time, even when the computer is off. By default, Windows assumes the time is stored in local time, while Linux assumes the time is stored in UTC time and applies an offset. This leads to one of your operating systems showing the wrong time in a dual boot situation.
To fix this, you have two options: Make Linux use local time, or make Windows use UTC time. Don’t follow both steps of instructions or they still won’t be speaking the same language! We recommend you make Linux use local time, if possible.
Make Linux Use Local Time to Fix Time Discrepancy
Making Linux use local time the same way Windows does is probably the best option. Windows does have a registry setting that forces it to store the time as UTC, but it reportedly isn’t well supported and can cause problems with some third-party applications that always assume the hardware clock is in local time. It’s also incompatible with Windows’ own Internet time-syncing service.
The steps to make your Linux system use local time can vary from Linux distribution to Linux distribution. However, on any Linux distribution with systemd, you can use the timedatectl
command to make this change. This will work on modern versions of Ubuntu, Fedora, Red Hat, Debian, Mint, and other Linux distributions that use systemd.
To make this change, first open a Terminal window on your Linux system. Run the following command to put the real time clock on the motherboard into local time. Linux will store the time in local time, just like Windows does.
timedatectl set-local-rtc 1 --adjust-system-clock
You will not get any feedback after you execute the command. To check your current settings, run:
timedatectl
If you see «RTC in local TZ: yes», Linux is set to use the local time zone instead of UTC. The command warns you that this mode is not fully supported and can cause some problems when changing between time zones and with daylight savings time. However, this mode is probably better supported than the UTC option in Windows. If you dual-boot with Windows, Windows will handle daylight savings time for you.
If you ever want to undo this change, run the following command:
timedatectl set-local-rtc 0 --adjust-system-clock
Make Windows Use UTC Time to Fix Time Errors
Making Windows use UTC time like Linux is probably not the best option. You can edit the registry to make Windows use UTC time, but this could potentially cause more problems than just making Linux use local time.
If you do want to do this, you’ll first want to disable the Internet time updating feature on Windows. This ensures Windows won’t set the clock incorrectly when trying to sync the current time from the Internet. On Windows 10, head to Settings > Time & language and disable «Set time automatically». On Windows 7, right-click the system clock in the taskbar and select «Adjust date/time». Click the «Internet Time» tab, click the «Change Settings» button, uncheck the «Synchronize with an Internet time server» option, and click «OK».
Make Windows Use UTC Time By Editing the Registry
You will now need to add the appropriate value to the Windows registry. Here’s our standard warning: The Registry Editor is a powerful tool and misusing it can render your system unstable or even inoperable. This is a pretty easy hack and you shouldn’t have any problems as long as you follow the instructions. That said, if you’ve never worked with it before, consider reading about how to use the Registry Editor before you get started. And definitely back up the Registry (and your computer!) before making changes.
First, open the Registry Editor by clicking Start, typing «regedit», and pressing Enter. Agree to the security prompt that appears.
Navigate to the following key in the left pane of the registry editor:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation
On Windows 10 and Windows 11, you can copy and paste the above line into the address box. However, this hack will work on older versions of Windows as well.
Right-click the «TimeZoneInformation» key and select New > DWORD (32-bit) Value.
Name your new value RealTimeIsUniversal
.
Double-click the RealTimeIsUniversal
value you just created, set is value data to 1
, and click «OK».
You’re now done, and you can close the Registry Editor. Windows will store the time in UTC, just like Linux does.
If you ever want to undo this change, return to this location in the registry, right-click the RealTimeIsUniversal
value you added, and delete it from your registry.
Download Our One-Click Registry Hack to Change to UTC
If you don’t want to edit the registry yourself, you can use our downloadable registry hack. We created one hack that makes Windows use UTC time, and one that restores it to local time. Both are included in the following ZIP file. Just download the file, double-click the hack you want to use, and agree to add the information to your registry.
Make Windows Use UTC Time
The above hacks do the same thing we described above. The Make Windows Use UTC Time hack creates the «RealTimeIsUniversal» entry with a value of «1», while the Make Windows Use Local Time hack deletes the «RealTimeIsUniversal» entry.
If you ever want to see what this or any other .reg file does, right-click it and select «Edit» to view the file in Notepad. You can easily make your own registry hacks, which just consist of a list of registry entries to add, edit, and remove in a properly formatted list.
What About Dual-Booting Windows on a Mac?
Although Apple’s macOS uses UTC time like Linux does, you shouldn’t have to do anything special when running Windows in Boot Camp on a Mac. Apple’s Boot Camp drivers handle everything. (Hackintosh dual-booters are another story, though, and will have to try using the Windows registry tweak above.)
Why Does Windows Use Local Time instead of UTC?
In short, it was to preserve backwards compatibility with Windows 3.1 systems and to prevent people from getting confused when they set the time in the computer’s BIOS. Of course, PC manufacturers chose local time to be compatible with Windows and Windows chose local time to be compatible with the decision PC manufacturers chose, so the cycle became self-reinforcing.
There’s currently no standard for labeling whether a time is stored as UTC or local time in BIOS or UEFI firmware, which would probably be the most logical solution. But it would require some work, and most people will never even notice different operating systems use different time formats — except in dual-boot configurations.
У Вас на компьютере установлены две операционные системы: Windows (например 10) и какая-либо из семейства Linux (Ubuntu или Mint) и при переходе из одной в другую всегда сбивается время? Решение этому есть и оно достаточно простое.
Не будем глубоко углубляться, но запомним: происходит эта ситуация потому, что операционные системы семейства Linux и Windows хранят время в разных форматах: UTC (Linux) и Localtime (Windows). Исправить расхождение по времени можно путем настройки одной из операционных систем на работу со временем другой операционной системы.
Вариант первый: настраиваем Linux на Localtime
Открываем терминал и вводим следующую команду:
sudo timedatectl set-local-rtc 1 --adjust-system-clock
Всё! Готово!
P.S. Если вдруг понадобиться вернуться к исходным настройкам времени, нужно будет ввести команду:
sudo timedatectl set-local-rtc 0
Вариант второй: настраиваем Windows на UTC
Вызываем командную строку от имени администратора и учитывая разрядность вашей операционной системы вводим в одну строку:
Для x86:
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
Для x64:
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_QWORD /d 1
Далее, для отключения службы времени Windows, всё в той же командной строке, запущенной от имени администратора пишем:
sc config w32time start=disabled
P.S. Если понадобиться вернуться к исходным настройкам времени, в командной строке от имени администратора пишем:
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 0
и соответственно запускаем службу синхронизации времени Windows:
sc config w32time start=demand
Всё! Проблема решена, надеюсь, что смог Вам помочь.
5
4
голоса
Рейтинг статьи