Windows против Linux по местному времени?

40

С тех пор, как я начал использовать Linux в режиме двойной загрузки с Windows, я заметил, что когда я перезагружал машину, время на другой ОС было неправильным, например, было 12:00 в Linux, затем я перезагружался, а в Windows это было 18:00, и когда я проверял BIOS, RTC был установлен на 18:00. Поскольку мой часовой пояс составляет -06: 00 CST, я предполагаю, что Linux просто устанавливает время RTC на UTC и пересчитывает время на основе часового пояса, тогда как Windows просто устанавливает RTC на местное время. Оба используют один и тот же NTP-сервер для синхронизации времени.

Вопрос в том, кто делает правильные вещи? На каком из них я должен установить настройку часового пояса в UTC, чтобы иметь правильное время на обоих?

arielnmz
источник
Дополнительный вопрос: почему этого не произошло со старыми версиями Windows и Linux?
Голимар

Ответы:

16

Ни то, ни другое не правильно, но использование UTC более правильно. У RTC нет часового пояса; это просто тупые настенные часы. Если ваш местный часовой пояс соблюдает летнее время (из которых есть много разновидностей, и правила меняются произвольно), то два раза в год вы должны идти и менять его. ОС сделает это за вас, но если RTC - UTC, ОС все равно выполняет UTC-> локальный перевод - зачем возиться с часами? Кроме того, во время перехода «откат» DST, RTC не может сказать вам, который час! Это 1:30 утра CDT или CST?

Видимо, Windows 8 поддерживает UTC для RTC. Windows 7 тоже сделала, но были проблемы .

Против этого выдвигался лучший аргумент, когда люди устанавливали свои часы BIOS вручную, но время на основе сервера сейчас намного более распространено.

кругозор
источник
68

Недавно я столкнулся с той же проблемой, и вот как я это исправил. Вам нужно сделать небольшое изменение в обеих ОС.

Я начал с Linux первым. Запустите следующие команды под пользователем root.

ntpdate pool.ntp.org

Это обновит ваше время, если оно установлено неправильно.

Теперь установите аппаратные часы в UTC с помощью этой команды.

hwclock --systohc --utc

Источник

Теперь загрузитесь в Windows и добавьте следующий реестр. Просто создайте файл .reg, используя приведенный ниже код в Блокноте. Сохраните его и запустите.

Windows Registry Editor Version 5.00

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

Источник

Со следующей загрузки обе ОС покажут вам правильное время.

Аян
источник
6
Лучший документированный ответ с конкретными инструкциями! +1.
agtoever
1
Следует указать, к каким версиям Windows применяется твик реестра.
Танат
2
Когда Windows получила способность понимать системные часы, которые показывают время, отличное от локального?
Марк
1
Эта настройка реестра работает для Windows XP / Vista / 7/8 / 8.1. @Tanath
Аян
3
@Mark в Windows XP.
Майкл Хэмптон
4

Обычно в системах Linux RTC (часы реального времени) установлены на UTC, а преобразование в местное время выполняется в пространстве пользователя на основе данных часового пояса и TZпеременной среды. Это «менее плохо», потому что оно поддерживает монотонное увеличение RTC системы и применяет любое волшебство часового пояса позже, гарантируя, например, что у файлов обычно не будет временной метки в будущем (что может легко произойти, по крайней мере, один раз в год, если система RTC настроена на местное время). Как указал Кен , в самом RTC нет понятия часового пояса, только время.

Как вы обнаружили, это вызывает проблемы при двойной загрузке с системой, которая обычно не работает таким образом, как семейство операционных систем Microsoft, которые обычно ожидают, что RTC будет установлен на местное время. Да, Windows NT (я думаю, что вплоть до NT 4, на самом деле) может работать с RTC, установленным на UTC, но, по крайней мере, в последний раз я смотрел, что это не совсем поддерживаемая конфигурация, и было несколько предостережений.

Простое решение в вашем случае, вероятно, состоит в том, чтобы установить RTC на местное время, сообщить вашей системе Linux, что RTC настроено на местное время (точная механика этого зависит от версии выпуска и выпуска, но, очевидно, в Ubuntu вы устанавливаете UTC=noв / etc / default / rcS ), а затем настройте операционные системы таким образом, чтобы только одна из них (желательно та, которую вы используете чаще всего, так как время, отображаемое во всех остальных, будет неправильным два раза в год, пока он не загрузится и не получит шанс исправить это) обрабатывает изменения летнего времени . И жить с минусами, которые должны быть управляемы в однопользовательской системе.

Можно также настроить сторону Windows на использование UTC в качестве часового пояса и отключить автоматические изменения летнего времени в Windows, а в Linux установить RTC в UTC и отобразить время, преобразованное в соответствии с его практикой. Тем не менее, это приведет к тому, что Windows отобразит дату и время в формате UTC, что может не соответствовать вашим ожиданиям. Это не является большой проблемой для нас, европейцев, которые находятся в трехчасовом перерыве от UTC, но могут стать проблемой в США. Вероятно, это более реалистичный вариант, если вы используете Windows только изредка, а вашей основной ОС является Linux или какая-либо другая ОС с поддержкой RTC-UTC.

CVn
источник
У вас есть какая-либо информация о том, что «это не была действительно поддерживаемая конфигурация, и было несколько предупреждений»?
Random832
@ Random832 Дай мне посмотреть, смогу ли я найти это. Я знаю, что видел это раньше, но сейчас, кажется, не могу найти его, по крайней мере, с помощью быстрого поиска в Google.
CVN
2

Если вы используете двойную загрузку, и между Windows и Ubuntu возникают конфликты времени, это происходит потому, что Ubuntu по умолчанию хранит время на аппаратных часах как UTC, а Microsoft Windows сохраняет время как местное время, что приводит к конфликту времени между Ubuntu и Windows.

Вам необходимо настроить систему Linux на использование местного времени, как описано здесь в этом руководстве для Ubuntu .

JakeGould
источник
Оно использует местное время, и я знаю, что оно действительно хранит время как UTC (если вы хотя бы прочитали вопрос), и я знаю, что я могу сделать, чтобы это исправить, вопрос в том, какой из них действительно делает то, что нужно измените другой вместо.
arielnmz
По умолчанию Windows использует местное время, Mac OS использует UTC, а UNIX-подобные операционные системы различаются. Операционная система, использующая стандарт UTC, обычно учитывает время CMOS (аппаратные часы) и время UTC (GMT, время по Гринвичу) и корректирует его при установке системного времени при загрузке в соответствии с вашим часовым поясом.
Опять же, я знаю об этом, я просто хочу знать, какая ОС делает это правильно, поэтому я могу, например, установить часовой пояс Windows в UTC и исправить это, или просто наоборот.
arielnmz
@MagomedSegaIsmailov Mac OS работает на любых системах, использующих BIOS RTC? Я предположил бы, что EFI обеспечил некоторое здравомыслие.
Random832
0

У меня двойная загрузка windows 10 и remix os, и просто следование только руководству по windows сработало для меня, оба раза верны. Я использовал командную строку, чтобы добавить сценарий также, как это было проще

Эдвин Корреа
источник
Пожалуйста, не добавляйте «спасибо» как ответы. Потратьте некоторое время на сайт, и вы получите достаточные привилегии, чтобы выслушать ответы, которые вам нравятся, что является суперпользователем, чтобы сказать спасибо.
ДэвидПостилл