После установки 24.04.1 LTS на мой настольный компьютер команда date выводит время UTC вместо ожидаемого местного времени.

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

Недавно я обновился до 24.04.1 LTS, и теперь команда date всегда выводит время в UTC, вместо того чтобы использовать местное время для часового пояса CDT.

$ timedatectl
                Местное время: Вс 2024-09-29 14:14:24 CDT
            Универсальное время: Вс 2024-09-29 19:14:24 UTC
                    Время RTC: Вс 2024-09-29 19:14:24
                Часовой пояс: America/Chicago (CDT, -0500)
Системные часы синхронизированы: да
                Служба NTP: активна
            RTC в местном часовом поясе: нет

Несмотря на то, что местный часовой пояс установлен правильно, команда date отображает время в UTC, а не в CDT:

$ date
Вс Сен 29 19:15:00 2024

Временная метка, отображаемая при использовании ls -l, также показывает время в UTC.

$ touch x
$ ls -l x
-rw-rw-r-- 1 tmacd tmacd 0 Сен 29 19:22 x

$ ls -l /etc/localtime
lrwxrwxrwx 1 root root 35 Сен 23 19:39 /etc/localtime -> /usr/share/zoneinfo/America/Chicago

Есть идеи, как заставить команду date отображать время с использованием местного часового пояса?

TZ, содержащая нераспознанный идентификатор часового пояса, может привести к тому, что команда date вернется к отображению времени в UTC.

% timedatectl
               Местное время: Пн 2024-09-30 05:11:37 CEST
           Универсальное время: Пн 2024-09-30 03:11:37 UTC
                 Время RTC: Пн 2024-09-30 03:11:37
                Часовой пояс: Europe/Rome (CEST, +0200)
Системные часы синхронизированы: да
              Служба NTP: активна
          RTC в местном часовом поясе: нет
% date
Пн Сен 30 05:11:42 CEST 2024
% TZ=foo date
Пн Сен 30 03:11:49 foo 2024

В вашем случае TZ был установлен в US/Central, что является правильным псевдонимом для America/Chicago; я не совсем понимаю, в чем дело с US/Central и другими псевдонимами, вызывающими такое поведение, но, похоже, что-то не так.

Сравните вывод TZ=foo date и TZ=US/Central date. Первый заставит команду date указать, что время выводится в часовом поясе foo, в то время как последний заставит указать, что время выводится в… “” (пустая строка) часовом поясе:

% TZ=foo date          
Пн Сен 30 03:26:00 foo 2024
% TZ=US/Central date
Пн Сен 30 03:26:02 2024

Я не уверен, является ли это какой-то ошибкой (пустая строка это явно предполагает) или это поведение как-то имеет смысл, однако решение заключается в том, чтобы проследить, где устанавливается TZ (в вашем случае это было установлено в ~/.bashrc) и либо удалить определение TZ полностью, либо установить его в America/Chicago.

На моем компьютере с Ubuntu TZ по умолчанию не задан, так что я думаю, что удаление определения TZ будет уместным.

Ответ или решение

После установки Ubuntu 24.04.1 LTS на ваш настольный компьютер вы столкнулись с проблемой, что команда date выводит время в формате UTC, вместо ожидаемого местного времени в зоне CDT (Центральное время США). Из предоставленной информации видно, что система правильно настроена на использование зоны America/Chicago, поскольку вывод команды timedatectl показывает правильное местное время. Однако, команда date и вывод ls -l отображают временные метки в формате UTC.

Причины проблемы:

  1. Переменная окружения TZ: Возможно, проблема связана с переменной окружения TZ, которая может быть установлена некорректно или с использованием нераспознанного идентификатора часового пояса. Например, если TZ установлен в US/Central, это может привести к тому, что команда date будет вести себя неожиданно, возвращая пустую строку вместо корректного значения.

Решение:

  1. Проверка переменной TZ: Для начала проверьте, установлена ли переменная TZ. Введите в терминале:

    echo $TZ
  2. Корректировка переменной TZ:

    • Если переменная TZ определена и равна US/Central, это может вызывать проблему. Необходимо либо удалить эту переменную, либо установить её в корректное значение.

    • Если вы хотите удалить переменную, сделайте это, открыв файл ~/.bashrc (или ~/.bash_profile, если вы используете его) в текстовом редакторе и найдите строку, где определяется TZ, затем закомментируйте её, добавив # в начале строки, или удалите её. Например:

      # export TZ=US/Central
    • Чтобы установить корректное значение, добавьте следующую строку в файл ~/.bashrc:

      export TZ=America/Chicago
  3. Применение изменений:
    После внесения изменений в файл, вам нужно перезагрузить настройки окружения. Это можно сделать либо закрыв и открыв терминал, либо выполнив:

    source ~/.bashrc
  4. Проверка изменений:
    После изменения или удаления переменной TZ, снова выполните команду date:

    date

    В выводе теперь должно отображаться местное время в формате CDT.

  5. Дополнительная проверка: Убедитесь, что системный часовой механизм является активным и правильно настроен, выполнив команду timedatectl:

    timedatectl

    Убедитесь, что "RTC in local TZ" установлено в "no"; это нормально для большинства систем, работающих с UTC.

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

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

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