date --utc показывает некорректное время UTC

Вопрос или проблема

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 время, что является проблемой.

Потенциальные причины проблемы

  1. Настройки временной зоны:
    Вы заметили, что в файле /etc/timezone указана временная зона America/Santiago, что может вызывать путаницу. Это может произойти, если разные приложения используют различные источники времени. Даже если вы установили временную зону на UTC с помощью timedatectl, это не всегда гарантирует, что все компоненты системы будут согласованы.

  2. Необходимость перезагрузки:
    После изменения настроек временной зоны и синхронизации времени с помощью timedatectl может потребоваться перезагрузка системы или перезапуск некоторых сервисов, чтобы изменения вступили в силу для всех приложений.

  3. Кэширование времени:
    В некоторых случаях приложения или демоны могут кэшировать старые значения времени. Проверьте, нет ли зависших процессов, которые могут показывать устаревшую информацию.

  4. Системный таймер:
    Также существует вероятность, что системные часы неправильно настроены. Убедитесь, что ваш аппаратный таймер (RTC) синхронизирован с системным временем.

Рекомендации по исправлению

  1. Проверка и установка временной зоны:
    Убедитесь, что вы корректно устанавливаете временную зону. Используйте следующие команды:

    sudo timedatectl set-timezone UTC

    После установки проверьте правильность:

    timedatectl
  2. Проверка переменной окружения TZ:
    Обратите внимание на переменную окружения TZ. Если она установлена и конфликтует с вашими настройками, измените или сбросьте её:

    unset TZ
  3. Синхронизация с NTP:
    Убедитесь, что ваша система настроена на синхронизацию времени через NTP (Network Time Protocol). Проверьте статус:

    timedatectl show-timesync
  4. Перезагрузка служб:
    Если после всех изменений проблемы продолжаются, попробуйте перезагрузить системные службы, отвечающие за время:

    sudo systemctl restart systemd-timesyncd
  5. Перезагрузка системы:
    Если ни один из вышеописанных шагов не помог, перезагрузка системы может устранить кэшированные значения и настройки.

Заключение

После выполнения всех этих шагов команда date --utc должна правильно отражать текущее время в формате UTC. Соответственно, другие приложения, такие как git, также должны корректно отображать время. Важно всегда следить за консистентностью настроек времени и временной зоны на уровне всей операционной системы, так как это может существенно повлиять на поведение любых программ, включая те, что зависят от системного времени.

Оцените материал
Добавить комментарий

Капча загружается...