Вопрос или проблема
date --utc
должен показывать текущее время в UTC. Однако он показывает неправильное время.
$ date --utc
Пт Ноя 22 06:34:08 PM UTC 2024
$ timedatectl
Локальное время: Пт 2024-11-22 18:34:11 UTC
Всемирное время: Пт 2024-11-22 18:34:11 UTC
Время RTC: Пт 2024-11-22 18:34:11
Часовой пояс: UTC (UTC, +0000)
Системные часы синхронизированы: да
Служба NTP: активна
RTC в локальном TZ: нет
$ python
Python 3.12.2 (main, 21 Ноя 2024, 14:06:05) [GCC 13.2.0] на linux
Введите "help", "copyright", "credits" или "license" для получения дополнительной информации.
>>> import datetime
>>> datetime.datetime.now(datetime.UTC)
datetime.datetime(2024, 11, 22, 18, 34, 24, 878230, tzinfo=datetime.timezone.utc)
>>> exit()
Я видел, что некоторые другие упоминают подобные вещи, поэтому я размещу их вывод здесь.
$ cat /etc/timezone
America/Santiago
$ echo $TZ
Тем не менее, я не вижу, как это относится к данному вопросу. date --utc
должен быть в UTC, что не зависит от какого-либо часового пояса. Я даже не знаю, почему в /etc/timezone
установлен этот часовой пояс, потому что я настроил часовой пояс с помощью timedatectl set-timezone UTC
. Почему так много различных способов в Ubuntu и Linux “установить” время, я не знаю.
Как мне сделать так, чтобы date --utc
возвращал правильное время? Также кажется, что git
использует это и, следовательно, получает неправильное время.
Ответ или решение
Ответ на вопрос о том, почему команда date --utc
отображает некорректное время в формате UTC, требует внимательного рассмотрения различных аспектов настройки времени в вашей системе. Давайте проанализируем вашу ситуацию более подробно.
Проблема с отображением времени
Вы указали, что команда date --utc
возвращает:
Fri Nov 22 06:34:08 PM UTC 2024
при том, что команда timedatectl
показывает:
Local time: Fri 2024-11-22 18:34:11 UTC
Universal time: Fri 2024-11-22 18:34:11 UTC
То есть видим, что команды date --utc
и timedatectl
сообщают разное UTC время, что является проблемой.
Потенциальные причины проблемы
-
Настройки временной зоны:
Вы заметили, что в файле/etc/timezone
указана временная зонаAmerica/Santiago
, что может вызывать путаницу. Это может произойти, если разные приложения используют различные источники времени. Даже если вы установили временную зону наUTC
с помощьюtimedatectl
, это не всегда гарантирует, что все компоненты системы будут согласованы. -
Необходимость перезагрузки:
После изменения настроек временной зоны и синхронизации времени с помощьюtimedatectl
может потребоваться перезагрузка системы или перезапуск некоторых сервисов, чтобы изменения вступили в силу для всех приложений. -
Кэширование времени:
В некоторых случаях приложения или демоны могут кэшировать старые значения времени. Проверьте, нет ли зависших процессов, которые могут показывать устаревшую информацию. -
Системный таймер:
Также существует вероятность, что системные часы неправильно настроены. Убедитесь, что ваш аппаратный таймер (RTC) синхронизирован с системным временем.
Рекомендации по исправлению
-
Проверка и установка временной зоны:
Убедитесь, что вы корректно устанавливаете временную зону. Используйте следующие команды:sudo timedatectl set-timezone UTC
После установки проверьте правильность:
timedatectl
-
Проверка переменной окружения TZ:
Обратите внимание на переменную окруженияTZ
. Если она установлена и конфликтует с вашими настройками, измените или сбросьте её:unset TZ
-
Синхронизация с NTP:
Убедитесь, что ваша система настроена на синхронизацию времени через NTP (Network Time Protocol). Проверьте статус:timedatectl show-timesync
-
Перезагрузка служб:
Если после всех изменений проблемы продолжаются, попробуйте перезагрузить системные службы, отвечающие за время:sudo systemctl restart systemd-timesyncd
-
Перезагрузка системы:
Если ни один из вышеописанных шагов не помог, перезагрузка системы может устранить кэшированные значения и настройки.
Заключение
После выполнения всех этих шагов команда date --utc
должна правильно отражать текущее время в формате UTC. Соответственно, другие приложения, такие как git
, также должны корректно отображать время. Важно всегда следить за консистентностью настроек времени и временной зоны на уровне всей операционной системы, так как это может существенно повлиять на поведение любых программ, включая те, что зависят от системного времени.