Локальное время на вашем компьютере отличается от времени сервера
На компьютере время сбивается не часто, так как оно, по сути, должно синхронизироваться по сети. Но все равно подобная неполадка часто встречается, и причины тому могут разные. Сегодня рассмотрим некоторые из них в ОС Windows 10, а также подробно разберем способы устранения данной проблемы.
Заключение
Причины сбоев во времени на Windows 10 могут быть как мелкими (неверно указанный сервер, нестабильное соединение), которые устраняются парой кликами мышки, так и более существенными (разряд батарейки BIOS). Если же причина возникновения неполадки пользователю неизвестна, я рекомендую следовать указанной выше последовательности.
например, в моем компьютере дата 20 Mar 2013, 14:28:12 , но дата хранит в базе данных, как 20 Mar 2013, 10:28:12.
что я должен делать всем пользователям во всех странах, чтобы использовать 1 ту же дату?
Edit: мой часовой пояс в(UTC+04:00) Баку сервер после PST
допустим, например, что ваш пользователь находится в Нью-Йорке (GMT - 5), а ваш сервер-в Индии (GMT + 5:30).
когда пользователь видит "локальное" время 10: 00am (EST), ваш сервер будет видеть "локальное" время 7:30pm (IST). Однако, используя UTC в обоих местах. пользователь увидит время UTC 3pm, а сервер увидит время UTC 3pm.
использование UTC во всех местах, но сохранение referece часового пояса пользователей позволяет всегда работать в UTC, но по-прежнему преобразуйте время в "локальное" время пользователей, когда вы хотите показать его им.
вы также не можете полагаться на то, где сервер размещается особенно, если это виртуальный сервер. Также вы не можете предположить, в какой часовой пояс хостинговая компания установила свои серверы. Лучше всего всегда кодировать defensivly с помощью DateTime.UtcNow при хранении времени даты в базе данных.
чтобы преобразовать это время UTC обратно в часовой пояс пользователя, вам нужно будет сделать следующее:
к твоему сведению, ты можно найти список часовых поясов из:
это должно распечатать:
как вы можете видеть, Вам нужно будет знать часовой пояс пользователей. Есть 2 способа узнать время пользователей:
- пользователь выбирает свой часовой пояс в своих пользовательских настройках
- используйте javascript для обнаружения часового пояса своей машины и отправьте его обратно с помощью формы
Я бы предложил первый вариант, так как второй можно усложнить людям жизнь. Например, если они базируются в Великобритании и летают в Штаты на неделю. Все изменится, и они могут не понять!
когда я работал над проектом, используемым международными пользователями, мы всегда использовали DateTime.UtcNow
если это локальный проект - т. е. предназначена только для использования в вашем часовом поясе, то DateTime.Now будет достаточно.
ваше местное время-это ваше системное время. Проверьте часовой пояс в операционной системе. Время сервера, на которое вы ссылаетесь, соответствует часовому поясу в файлах конфигурации сервера.
убедитесь, что у вас есть часовой пояс операционной системы и часовой пояс вашего сервера.
Многие новые пользователи, которые только перешли на Linux с операционной системы Windows, и пока все еще запускают эту систему время от времени, сталкиваются с проблемой, что после загрузки Windows в Ubuntu сбивается время на несколько часов назад или вперед, затем после нескольких перезагрузок уже сложно понять какое сейчас время.
Все это происходит из-за различий формата хранения времени в этих операционных системах. И будет происходить при каждой перезагрузке, сколько бы вы ни устанавливали правильное время. Но эту проблему можно решить. И даже несколькими способами. В этой статье мы рассмотрим, как решить проблему сбивается время в Ubuntu и Windows.
Замена батарейки BIOS
К замене батарейки BIOS приступаю в последнюю очередь, если ничего из вышеперечисленного не помогло. Располагается она на материнской плате. Если с ней действительно есть какие-то проблемы, при запуске компьютера могут появляться некоторые сбои еще на этапе чтения BIOS. Причем сбивается оно именно на дату производства материнской платы или программы.
Решение – нахожу батарейку соответствующей формы и напряжением 3 Вольта, обычно это модель CR2032. Перед заменой надо полностью обесточить компьютер и выдернуть шнур питания из розетки. Вероятно, что BIOS после полностью сбросится, но сбои во времени прекратят появляться.
Зачем нужна синхронизация
От того, какое на компьютере установлено время, зависит многое:
- отображение спецпредложений и акций на сайтах;
- публикация и сортировка комментариев к статьям;
- совместная работа компьютеров в локальной сети — если время на компьютерах будет различаться, это может привести к сбоям;
- если одна база данных обслуживается с нескольких компьютеров, они должны чётко синхронизироваться во времени; иначе запрос одного компьютера может прилететь из будущего, а реальный запрос из будущего попасть в далекое прошлое;
- если вы используете телефон для двойной аутентификации , то с неправильным временем телефон будет выдавать неправильный код, и аутентификация не пройдёт;
- от времени зависят сертификаты безопасности: если ваше локальное время намного отличается от общемирового, то для вас все сертификаты безопасности будут недействительными, сайты не откроются.
В целом единственный случай, когда не нужна синхронизация, — когда компьютер работает независимо от сети, а результаты его вычислений не связаны со временем. В остальных случаях синхронизация полезна.
Не сохраняется время из-за севшей батарейка BIOS
Самый «классический» ответ на вопрос «Почему не сохраняется и сбивается время и дата на компьютере?» — севшая батарейка BIOS. Данная батарейка отвечает за сохранение настроек BIOS/ UEFI, когда ваш компьютер/ноутбук выключен из розетки, а также обеспечивает автономную работу встроенных аппаратных часов.
Если батарейка села, то при отключении питания материнской карты, BIOS не может сохранить свои настройки, и все они сбрасываются, в том числе и текущее дата и время. Если ваш компьютер довольно старый, вероятность того, что у вас села батарейка крайне велика. Настоятельно рекомендуем ее заменить. Сделать это не сложно, и, как правило, особых инженерных навыков процесс замены батарейки BIOS не требует. В большинстве домашних систем используется в BIOS стандартная батарейка CR2032 на 3 вольта.
Если замена батарейки не помогла, проверьте состояние перемычки сброса настроек BIOS (джампер с перемычкой расположен рядом с отсеком для батарейки и может быть подписан как CCMOS / CLEAR / RESET). Возможно кто-то оставил данный джампер в положении «сброса», в результате чего при каждой подачи питания на мат.плату, настройки BIOS обнуляются. Верните джампер в нормальное положение.
Следующий вариант – обновление прошивки BIOS материнской карты (как это сделать – смотрите на сайте производителя вашего железа). Часто в более новых прошивках исправляются различные баги.
В том случае, если у вас постоянно меняются настройки даты//времени в Windows, в первую очередь стоит проверить текущие настройки часового пояса и параметры синхронизации времени с интернетом. В Windows 10 текущие настройки времени можно посмотреть в меню панели инструментов (Панель управления\Часы, язык и регион -> Дата и время). В этом примере видно, что указан часовой пояс UTC + 03, переход на зимнее время отключен.
Совет . Вы можете управлять часовым поясом Windows из командой строки с помощью утилиты tzutil .
Совет . Напомню, что с 2014 года в России отменен переход на летнее время. Возможно вы давно не обновляли свою ОС (Windows 8 и ниже) и у вас не установлены обновления, отключающие переход на летнее время .
Сбивается время при переключении между Linux и Windows (Dual Boot)
Отдельно стоит рассмотреть конфигурации, когда на компьютере установлены две операционные системы (Windows и Linux) в конфигурации двойной загрузки (Dual Boot). Вы можете столкнуться с проблемой, что после переключения между операционными системами (загрузки в Linux после Windows) сбивается время на несколько часов вперед или назад.
Windows и Linux по разному работают с временем BIOS. Дело тут в наличии двух форматов представления времени UTC и localtime .
Операционные системы GNU/Linux (в том числе Mac OS X) считают, что время в BIOS указано в формате UTC (по Гринвичу). Соответственно, при загрузке Linux для преобразования UTC к локальному времени добавляет (отнимает) смещение текущего часового пояса, который выбрал пользователь. Т.е. чтобы получить локальное время для часового пояса Москвы UTC+3, Linux добавит 3 часа.
Windows же считает, что в время в BIOS хранится в формате localtime, и если вы указали новый часовой пояс, или синхронизировали время с внешним источником, система соответственным образом меняет время в BIOS на локальное время. Linux (Ubuntu в моем случае) считает, что время в BIOS указано в формате UTC и дополнительно добавляет смещение часового пояса. Именно поэтому и сбивается время при переключении между Linux и Windows.
reg add "HKLMACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /t REG_DWORD /d 1 /f
Совет. В 64 битных версиях Windows нужно создавать параметр типа QWORD вместо DWORD: reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_QWORD /d 1
Также в Windows нужно отключить обновление времени из Интернета, т.к. служба времени Windows при каждом обновлении времени будет сбрасывать UTC время на локальное.
sc config w32time start= disabled
Осталось перезагрузить Windows.
Либо можно переключить Linux на использование локального времени. В Ubuntu 15.04 и выше это можно сделать командой:
timedatectl set-local-rtc 1
Как вернуть обратно?
Если вы хотите вернуть все как было, то сделать это можно проще простого. Сначала возвращаем ключ реестра в правильное положение:
> Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 0
И запускаем обратно службу синхронизации:
> sc config w32time start= demand
Готово, а дальше рассмотрим, как заставить Linux использовать формат времени localtime.
Изменение часового пояса
В этом же окне «Дата и время» я могу настроить часовой пояс, не переходя при этом к настройкам времени по Интернету, а оставаясь на первой одноименной вкладке. Там я могу нажать на кнопку «Изменить часовой пояс».
В следующем окне я точно подбираю часовой пояс, соответствующий моему местоположению, и применяю изменения нажатием на кнопку ОК. После этого время должно вновь синхронизироваться по сети, но уже в соответствии с новыми настройками.
Способы решения проблемы со сбоем времени
Решение зависит от корня проблемы, и определить его довольно просто. При наличии проблем с сетью система будет ожидать стабильного подключения, и только потом синхронизирует время. Если дело стоит за вирусом, компьютер молчать тоже не станет – даже Windows Defender легко обнаруживает подобного рода вредоносное ПО. При наличии активатора в системе его сначала нужно удалить, а если села батарейка, то перед загрузкой ОС это будет показано.
Переподключение к сети Интернет
Если настройка времени производится по сети, возможно, дело кроется в нестабильном подключении к Интернету. Для начала надо перезагрузить сеть, отключив и вновь включив роутер. Если не помогло, можно попробовать подключиться к другой точке, допустим, с телефона, и там уже попробовать обновить время.
Изменение адреса сервера
Если вышеуказанная процедура не помогает, можно попробовать для начала изменить адрес сервера. Сначала открываю «Панель управления» — ввожу соответствующий запрос в поисковике в панели задач. Затем открываю раздел «Дата и время» в списке.
Откроется новое окно, в нем я перехожу ко вкладке «Время по Интернету». Там будет кнопка «Изменить параметры…», по ней я и кликаю.
В следующем окне ввожу адрес сервера, затем жму по кнопке «Обновить сейчас», проверяю, синхронизировалось ли время, и уже потом выхожу, нажав на кнопку ОК.
Настройка Linux для работы localtime
По умолчанию Linux использует формат хранения времени UTC, но если Ubuntu сбивает время Windows, вы можете очень просто заставить систему хранить в аппаратном таймере местное время. Во всех дистрибутивах, использующих Systemd, в том числе в Ubuntu для этого достаточно выполнить команду:
sudo timedatectl set-local-rtc 1 --adjust-system-clock
Чтобы посмотреть текущее состояние аппаратных и программных часов выполните:
Готово, теперь вы можете перезапустить компьютер и запустить Windows, чтобы убедиться, что время не сбивается при перезагрузке. В более старых системах Ubuntu, вам нужно отредактировать файл /etc/default/rcS и заменить UTC=yes на UTC=no. Вы можете сделать это командой:
sudo sed -i 's/UTC=yes/UTC=no/' /etc/default/rcS
Причины возникновения неполадки со временем
В основном, сбои и отставания временных настроек на компьютере на базе ОС Windows 10 появляются по нескольким причинам:
- севшая батарейка BIOS;
- воздействие вирусного ПО;
- неверные настройки часовых поясов;
- влияние активаторов на работу системы;
- неправильное указание сервера;
- нестабильное соединение с сетью.
Выводы
Вот и все. Теперь, если вы столкнетесь с проблемой Windows 10 - сбивается время Ubuntu или любом другом Linux дистрибутиве, вы уже будете знать, как её решить с помощью двух полностью работающих способов. Если у вас остались вопросы, спрашивайте в комментариях!
Мы разобрались, как настроить правильное время в Ubuntu и Windows, чтобы временные зоны не сбивались, но что такое временные зоны и зачем они нужны, на завершение видео про это:
В этой статье рассмотрим, почему после выключения или перезагрузки ноутбука / компьютера / сервера в операционной системе могут сбрасываться текущие настройки даты и времени, указанные ранее. Рассмотрим, как самый банальный случая с севшей батарейкой BIOS, так и более интересные кейсы с мультизагрузкой Windows и Linux на одном компьютере, и багом прошивки на Windows серверах HPE ProLiant G9 /G8.
Проверка системы антивирусом
Использую установленный в систему антивирус, любой, который есть – у меня это Windows Defender. Открываю главное окно и запускаю процедуру сканирования. Если в системе действительно имеются вирусы, программа обнаружит их и автоматически обезвредит – поместит в карантин или удалит совсем.
Как работает синхронизация
В общем виде синхронизация времени работает так:
- Устройство посылает запрос на сервер синхронизации и запоминает время, когда ушёл запрос. Запрос идёт по протоколу NTP, о нём ниже.
- Сервер получает запрос, и, если всё в порядке, — записывает, когда он его получил, и отправляет данные с точным временем на сервере.
- Устройство получает ответ от сервера и записывает, во сколько оно его получило.
- Зная время отправки и получения запроса и точное время на сервере, можно рассчитать глобальное время (но с какой-то точностью).
Это всё повторяется с какой-то периодичностью — раз в час, раз в день или с любым другим интервалом.
Настройка 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
Удаление активатора
Хоть активаторы и продлевают пробный период платных программ, делать это они могут двумя способами – имитируют сервер активации или же подставляют и переводят системное время. Желательно не устанавливать их изначально, а если таковые и есть в системе, то удалять, иначе сбои во временных параметрах не исчезнут.
Почему так происходит?
Как я уже сказал, проблема в разных форматах хранения и восстановления времени. В компьютере есть два вида часов. Аппаратные - идут всегда, даже когда компьютер выключен и программные часы, встроенные в ядро. Когда компьютер включается значение аппаратных часов записывается в программные, и в дальнейшем операционная система берет время оттуда. Но 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
Если ваш компьютер входит в состав домена Active Directory, то информацию о том как работает синхронизация времени в домене можно получить из этой статьи.
Синхронизация времени в «Параметрах»
Если подобного рода проблема разовая, то есть появилась впервые и не имеет цикличности, можно включить синхронизацию. Для начала я открою «Параметры» системы нажатием на комбинацию Win + I. Перехожу в категорию «Время и язык», после открою вкладку «Дата и время». Там будет кнопка «Синхронизировать» — жму на нее и жду, когда часы настроятся.
Как вернуть обратно?
Опять же, вернуть все как было можно с помощью одной команды:
sudo timedatectl set-local-rtc 0
А в старых дистрибутивах Ubuntu:
sudo sed -i 's/UTC=no/UTC=yes/' /etc/default/rcS
Что такое NTP
NTP — это сокращение от Network Time Protocol, что переводится как «протокол сетевого времени».
Протокол спроектирован так, чтобы заниматься только синхронизацией времени. Для этого используются пакеты объёмом всего 48 байт, причём 24 из них заполняет устройство, а 24 — сервер. Это значит, что для точности в 0,01 секунды достаточно один раз получить и передать 48 символов. Если размер пакета сделать слишком большим, то задержки при передаче будут больше и может пострадать точность синхронизации.
Для работы NTP нужен сервер точного времени, который ответит на наш запрос. Сервер всегда знает, какое сейчас время, и моментально реагирует на каждый запрос.
Какие бывают серверы синхронизации
В протоколе NTP есть несколько классов серверов точного времени, в зависимости от точности. Эти классы называются Stratum, а цифра после названия показывает уровень сервера по отношению к самому точному времени.
Stratum 1 — самые точные серверы, которые могут учитывать время с точностью в одну триллионную долю секунды. Они получают время напрямую от атомных часов либо от сервисов GRS или «Глонасс». Для запуска и обслуживания такого сервера нужно сложное оборудование, поэтому серверов первого уровня в мире мало. Большинство из них не отвечает на запросы от обычных пользователей и обслуживает только другие серверы уровнем пониже.
Stratum 2 — серверы точного времени второго уровня. Они получают данные от серверов первого уровня и работают с погрешностью примерно 0,001 секунды. Такие серверы уже могут отвечать на большинство запросов и обслуживать серверы поменьше.
Stratum 3 получают данные от серверов второго уровня, и тут уже точность может падать до 0,05 секунды. Дальше идут уровни 4, 5 и так далее, ограничений снизу нет.
Сбивается время после перезагрузки на серверах HP с Windows Server
На серверах HPE DL/ML Gen9 с Windows Server 2008 R2 / 2012 R2 у одного из удаленных заказчиков столкнулись с интересной проблемой после смены часового пояса. Как оказалось, на серверах HP ProLiant Gen9 (и на одном из серверов HP ProLiant DL580 Gen8) при изменении системного времени или часового пояса, после перезагрузки сервера, системное время не сохранялось и сбрасывалось на предыдущее. Проблема были подвержены сервера, в которых Windows Server загружается в режиме Legacy (при нативной UEFI загрузки проблемы отката времени не было).
В журнале системы при этом появлялось такое событие:
В качестве решения проблемы HP предлагает обновить ROM до версии не менее 1.5. Именно в этой версии ROM-Based Setup Utility (RBSU) не подвержена багу со сбросом временм.
Либо в качестве обходного решения, можно указать, чтобы Windows считала, что BIOS отдает ей системное время в формате UTC (а не локальное время). Для этого, как мы уже говорили выше нужно создать в ключе реестра HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation параметр с именем RealTimeIsUniversal и значением 1.
В прошлый раз мы рассказали, какие сложности могут ждать программистов, когда они пишут код для работы со временем. Сегодня перейдём на более сложный уровень: как компьютеры и другие устройства синхронизируют время между собой.
Какая точность нужна для синхронизации
Если вам просто нужно «обычное» точное время с точностью до секунды (например, на телефоне или в часах), то подойдёт любой сервер синхронизации времени. Обычно это будут сервера Stratum 3, потому что их больше всего.
Если нужно что-то обрабатывать с точностью до 0,01 секунды, то нужно найти сервер второго уровня в своей стране и подключиться к нему (так будет точнее). Например, можно использовать серверы в Саратове .
Если же вам нужна точность 0,001 секунды или выше — договаривайтесь с владельцем сервера первого уровня или создавайте свой сервер.
Читайте также: