Время в bios и в windows разное

Многие новые пользователи, которые только перешли на Linux с операционной системы Windows, и пока все еще запускают эту систему время от времени, сталкиваются с проблемой, что после загрузки Windows в Ubuntu сбивается время на несколько часов назад или вперед, затем после нескольких перезагрузок уже сложно понять какое сейчас время.

Все это происходит из-за различий формата хранения времени в этих операционных системах. И будет происходить при каждой перезагрузке, сколько бы вы ни устанавливали правильное время. Но эту проблему можно решить. И даже несколькими способами. В этой статье мы рассмотрим, как решить проблему сбивается время в Ubuntu и Windows.

Почему так происходит?

Как я уже сказал, проблема в разных форматах хранения и восстановления времени. В компьютере есть два вида часов. Аппаратные — идут всегда, даже когда компьютер выключен и программные часы, встроенные в ядро. Когда компьютер включается значение аппаратных часов записывается в программные, и в дальнейшем операционная система берет время оттуда. Но 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, чтобы временные зоны не сбивались, но что такое временные зоны и зачем они нужны, на завершение видео про это:

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Началось всё с того, что обнаружил: php-функция time() выдает мне не системное время, как должна была бы, а чистый UTC, хотя я на +2.
Т.е. вывод time() в системе соответствует тому, что говорит unixtimestamp.com в The Current Unix Timestamp. Хотя в системе везде установлен UTC+2, и BIOS-время ему тоже соответствует.

Я по-разному игрался сначала с настройками системы (Windows 10): включал/отключал автосинхронизацию и менял ее серверы, по-всякому извращался с часовыми поясами и просто отрубал всю автоматику, задавая дату/время вручную.
Нифига.

Я уж было подумал, что проблема в настройках сервера или самого php.

Но потом вспомнил, что глюки времени у меня были ещё на Windows 7. И даже когда нужен был Linux, у меня в Mint тоже косяки со временем были: скакало, если правильно помню, на 2 или 3 часа, причем в будущее.

Т.е. проблема не в системе точно, а где-то на околожелезном уровне.

Ещё есть момент: при отключении питания сбрасываются настройки BIOS, в т.ч. время.
И три подряд замены батарейки эту проблему не решили.
Возможно, это как-то связано.

В остальном машина прекрасно себя чувствует. При этом мне из функций системного времени достаточно, чтобы оно корректно отображалось в углах мониторов (автосинхронизация решает эту проблему самостоятельно), а отключение питания и сброс BIOS мне не страшны, т.к. подключен через ИБП.

Т.е. баг особо жить не мешает.

Но интересно докопаться до сути.

Какие есть идеи?

1 / 1 / 2

Регистрация: 13.09.2014

Сообщений: 41

1

28.05.2015, 18:24. Показов 9095. Ответов 20


Студворк — интернет-сервис помощи студентам

Всем привет!
Проблема в следущем: время биоса выставлено по UTC, XP SP3 настроена на московское время, синхронизация времени с интернетом выключена, служба w32time отключена, время при загрузке показывает правильное, спустя некоторое время (никакой логики я не нашел, время абсолютно разное и не зависит от подключения интернета) часы сбиваются на три часа назад. Как сделать, чтобы время отображалось верно?



0



1712 / 1499 / 62

Регистрация: 23.11.2011

Сообщений: 2,136

28.05.2015, 20:18

2

Было когда-то такое. Просто поставил его из винды, оно поменялось и в биосе. Больше сбоев не было.



1



1 / 1 / 2

Регистрация: 13.09.2014

Сообщений: 41

29.05.2015, 11:11

 [ТС]

3

Цитата
Сообщение от Gysia
Посмотреть сообщение

Было когда-то такое. Просто поставил его из винды, оно поменялось и в биосе. Больше сбоев не было.

Ну мне не нужно, чтобы менялось в биосе. В биосе должно быть UTC, в винде — MSK.



0



1712 / 1499 / 62

Регистрация: 23.11.2011

Сообщений: 2,136

29.05.2015, 19:29

4

Не получится. В этом случае система с биосом очень тесно связанны.



0



Эксперт .NET

10126 / 6115 / 1440

Регистрация: 25.05.2015

Сообщений: 18,552

Записей в блоге: 14

29.05.2015, 19:34

5

Цитата
Сообщение от Anoobis
Посмотреть сообщение

В биосе должно быть UTC, в винде — MSK.

У вас линукс опирается на время биоса, и требует его в UTC?



0



1712 / 1499 / 62

Регистрация: 23.11.2011

Сообщений: 2,136

29.05.2015, 19:38

6

Цитата
Сообщение от Rius
Посмотреть сообщение

У вас линукс опирается на время биоса

Цитата
Сообщение от Anoobis
Посмотреть сообщение

XP SP3



0



Эксперт .NET

10126 / 6115 / 1440

Регистрация: 25.05.2015

Сообщений: 18,552

Записей в блоге: 14

29.05.2015, 19:41

7

Цитата
Сообщение от Gysia
Посмотреть сообщение

Такая проблема актуальна при дуалбуте винды и линукса.



0



1712 / 1499 / 62

Регистрация: 23.11.2011

Сообщений: 2,136

29.05.2015, 19:44

8

Дык поставьте маленькую програмулину и пусть она показывает вам время хоть в Мавритании или Австралии. А биос будет настроен на UTC.



0



Rius

Эксперт .NET

10126 / 6115 / 1440

Регистрация: 25.05.2015

Сообщений: 18,552

Записей в блоге: 14

29.05.2015, 19:48

9

Это не решение. В логах будут кривое время, мозг сломаешь потом их читать.
Если вдруг дело действительно в этом, в файле /etc/default/rcS одна строка меняется на такую:

Bash
1
UTC=no



0



1 / 1 / 2

Регистрация: 13.09.2014

Сообщений: 41

29.05.2015, 21:38

 [ТС]

10

Цитата
Сообщение от Gysia
Посмотреть сообщение

Не получится. В этом случае система с биосом очень тесно связанны.

Дело всё в том, что оно получается. Вот только что перезагрузился, на часах было 21:29, подключил интернет в 21:32, сейчас 21:35… но минут через 15-120 время сбросится на 3 часа назад… так каждый раз.

Цитата
Сообщение от Rius
Посмотреть сообщение

У вас линукс опирается на время биоса, и требует его в UTC?

Да стоит линукс, можно на нем выставить локальное время, но мне нужно именно utc.



0



Эксперт .NET

10126 / 6115 / 1440

Регистрация: 25.05.2015

Сообщений: 18,552

Записей в блоге: 14

29.05.2015, 21:43

11

Цитата
Сообщение от Anoobis
Посмотреть сообщение

но мне нужно именно utc.

Причина? UTC=no устраняет непрошенный перевод часов.



0



1 / 1 / 2

Регистрация: 13.09.2014

Сообщений: 41

29.05.2015, 23:56

 [ТС]

12

Цитата
Сообщение от Rius
Посмотреть сообщение

Причина? UTC=no устраняет непрошенный перевод часов.

Что такое UTC=no? Я не понимаю вас, какая вообще разница, что за ОСь установлена параллельно с windows?
Ситуация следующая:
1. в 21:38 включаю комп, жму del, захожу в биос, смотрю время 18:39, время в биосе по UTC
2. загружаю WindowsXP, на часах 21:41
3. включаю DSL-соединение, через полчаса отключаю его, время 22:10 — на часах 22:10 значит интернет не влияет на часы компьютера/ОС;
… оставляю комп включенным, встаю ухожу изза него… возвращаюсь в в 23:47 на часах компьютера 20:47

ПОЧЕМУ ТАК?

Добавлено через 7 минут
снова перезагружаю винду, снова часы показывают правильное время, 23:53 на часах компа, что соответствует местному времени… через какое время и почему они сбиваются на 3 часа назад хз



0



Эксперт .NET

10126 / 6115 / 1440

Регистрация: 25.05.2015

Сообщений: 18,552

Записей в блоге: 14

30.05.2015, 00:01

13

Если причина в дуалбуте:
Винда переводит время биоса на локальное. Линукс считает его UTC-шным.
Обе системы корректируют время, если оно не совпадает с их представлениями о текущем времени (получаемом по ntp).
Эффект не должно быть, если загружать только одну систему раз за разом. Время один раз скорректируется и дальше часы будут совпадать с локальным временем.

В каком часовом поясе вы обитаете. То что в винде МСК, видно.
В реестре есть HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTime IsUniversal ? Какое значение?



0



Эксперт по компьютерным сетям

2408 / 608 / 50

Регистрация: 17.03.2013

Сообщений: 2,212

30.05.2015, 00:09

14

Цитата
Сообщение от Anoobis
Посмотреть сообщение

Что такое UTC=no? Я не понимаю вас,

всё в точности так, как пишет Rius.

Не морочьте себе голову вопросами в стиле «почему «(капсом), поправьте одну строку в rcS и всех делов

Миниатюры

Как объяснить windows, что в биосе время выставлено по UTC?
 



1



1 / 1 / 2

Регистрация: 13.09.2014

Сообщений: 41

30.05.2015, 00:13

 [ТС]

15

Винда не переводит время на локальное, она вначале показывает его по часовому поясу, а потом сбивается, машинное время остается темже utc (я проверял время биоса до старта винды, после сброса/выключения).

Цитата
Сообщение от Rius
Посмотреть сообщение

В каком часовом поясе вы обитаете. То что в винде МСК, видно.
В реестре есть HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTime IsUniversal ? Какое значение?

Местное время UTC+3
RealTimeIsUniversal 0x1



0



Эксперт .NET

10126 / 6115 / 1440

Регистрация: 25.05.2015

Сообщений: 18,552

Записей в блоге: 14

30.05.2015, 00:13

16

RealTimeIsUniversal удалите вручную. Будет глючить?



0



1 / 1 / 2

Регистрация: 13.09.2014

Сообщений: 41

30.05.2015, 00:21

 [ТС]

17

bormotolog, где в windows это делается?



0



Эксперт .NET

10126 / 6115 / 1440

Регистрация: 25.05.2015

Сообщений: 18,552

Записей в блоге: 14

30.05.2015, 00:22

18

Anoobis, описанное bormotolog делается в линуксе.



0



1 / 1 / 2

Регистрация: 13.09.2014

Сообщений: 41

30.05.2015, 00:28

 [ТС]

19

Цитата
Сообщение от Rius
Посмотреть сообщение

RealTimeIsUniversal удалите вручную. Будет глючить?

да после удаления параметра — глючит, 20-26 на часах после перезагрузки, реальное время 00-26



0



Эксперт .NET

10126 / 6115 / 1440

Регистрация: 25.05.2015

Сообщений: 18,552

Записей в блоге: 14

30.05.2015, 08:12

20

Верните обратно и поставьте в 1 тогда.
Описание чисто виндовой проблемы с часами: [удалено]

Добавлено через 7 часов 39 минут
Откуда корни проблемы: IBM PC Real Time Clock should run in UT
Для Windows 7 SP1 и выше выпущен патч: KB2922223, исправляющий баг с RealTimeIsUniversal.
bormotolog, если патч установлен, можно вернуть линукс к UTC часам в биосе. Затем в винде создать ключ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTime IsUniversal (dword) = 1. Теперь в биосе будет время UTC, а в линуксе и винде — локальное.

Anoobis, под предыдущие винды, WinXP в том числе, эта проблема не решена. В KB2687252 настоятельно рекомендуется установить RealTimeIsUniversal в 0.



2



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

30.05.2015, 08:12

20

Yep, I had success. Don’t forget disabling the «internet update» for the time!

I used the way described in the ArchWiki using a QWORD on a 64bit Win10.
The NTP is done on Arch and not on Windows, but the latter isnt getting booted so often anyway.

Here’s the .reg file:

RealTimeIsUniversal.reg

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]
     "RealTimeIsUniversal"=hex(b):01,00,00,00,00,00,00,00

From ArchWiki: UTC in Windows

Using regedit, add a DWORD value with hexadecimal value 1 to the
registry:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal

Alternatively, create a *.reg file (on the desktop) with the following
content and double-click it to import it into registry:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]
 "RealTimeIsUniversal"=dword:00000001

If the above appears to have no affect, and a 64-bit variant of
Windows is being used, using a QWORD value instead of a DWORD value
may resolve the issue.

Это перевод Why does Windows keep your BIOS clock on local time? Автор: Реймонд Чен.

Хотя Windows NT внутри себя использует UTC время, часы BIOS остаются на местном (локальном) времени. Почему так делается?

На это есть несколько причин. Одна из них — цепочка из обратных совместимостей.

В старые времена люди часто имели более одной установленной системы и загружались (dual-booted) то в Windows NT, то в MS-DOS/Windows 3.1. MS-DOS и Windows 3.1 работали с местным временем, поэтому Windows NT просто следовало этому поведению, так что вам не пришлось бы переустанавливать часы каждый раз, когда вы загружали другю операционную систему.

Со временем люди проапгрейдились с Windows NT на Windows 2000, а потом и на Windows XP. В этот раз снова не было возможности изменить временную зону, т.к. люди должны были иметь возможность беспроблемной загрузки между старой и новой операционной системой.

Другая причина в сохранении установки часов BIOS по местному времени — чтобы не путать людей, если они будут устанавливать время в BIOS руками. Если вы нажмёте волшебную кнопку при самотестировании по включению питания, BIOS перейдёт в режим конфигурации, и одной из вещей, которые вы сможете изменить здесь — это время. Представьте, как запутанно было бы, если бы вы установили время в 15.00, а когда вы запустили Windows, часы показывали бы 11.00.

«Тупой компьютер. Зачем вообще я вводил там время, если он всё запорол и теперь мне надо вводить заново?»

А если вы попытаетесь объяснить им: «Нет-нет, видите ли, там было время по UTC, а не местное», вероятно в ответ вы услышите: «Это что ещё за пустоголовый бред (propeller-headed nonsense)? Хочешь сказать, что когда компьютер спрашивает меня сколько времени, мне нужно сказать ему, какой час сейчас в Лондоне? (кроме того, летом это будет время в Рейкьявике!?) Почему вообще я должен помнить свою временную зону и руками вычитать четыре часа? Или это пять летом? А, может быть, я должен буду прибавлять? Почему вообще я должен задумываться об этом? Тупой Microsoft. Мои часы говорят, что сейчас три часа дня. Я ввожу 15.00. Всё, точка.»

Более того, некоторые BIOS-ы имеют встроенные «будильники», которые вы можете использовать для включения своего компьютера в указанное время. Вы хотите конвертировать все эти времена в UTC каждый раз, когда вам нужно задать время пробуждения?

  • Вредно ли часто переустанавливать windows
  • Временные файлы winrar в windows 10
  • Восточный фронт неизвестная война windows 10
  • Временные файлы в windows 10 не отображаются
  • Вредит ли частая переустановка windows