Как проверить, в каком часовом поясе Linux?
Есть ли способ проверить, в каком часовом поясе я нахожусь в настоящее время под Linux?
Есть ли способ проверить, в каком часовом поясе я нахожусь в настоящее время под Linux?
Если вы хотите цифровой часовой пояс:
date +'%:z %Z'
Образец вывода:
-05:00 EST
Вместо этого я хотел найти часовой пояс в форме “США/Восток” или “Европа/Лондон”. Вы можете найти это в:
ZONE="US/Eastern"
в /etc/sysconfig/clock Обычно, переменная окружения TZ
скажет вам что-то полезное. Тем не менее, лучше всего использовать такие функции, как mktime()
и localtime()
для преобразования между time_t
и локальным представлением часового пояса. То есть не пытайтесь делать преобразование самостоятельно.
Для убунту попробуйте это :
$ cat /etc/timezone
Вывод выборки :
Asia/Kolkata
Для других дистрибутивов Ссылка : https://unix.stackexchange.com/questions/110522/timezone-setting-in-linux
Иногда вы можете искать канонический часовой пояс, а не короткую форму, как производится date %Z
, например, US/Eastern
. На системах с timedatectl
, например, Fedora, timedatectl
выдает много полезной информации, включая текущую зону:
# timedatectl
Local time: Tue 2016-09-13 17:10:26 EDT
Universal time: Tue 2016-09-13 21:10:26 UTC
RTC time: Tue 2016-09-13 21:10:26
Time zone: US/Eastern (EDT, -0400)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
К сожалению, timedatectl
принимает set-timezone
в качестве команды, но не имеет соответствующего get-timezone
. Разберитесь с этим следующим образом:
# timedatectl status | grep "zone" | sed -e 's/^[]*Time zone: \(.*\) (.*)$//g'`
US/Eastern
Для часового пояса можно использовать геолокацию:
$ curl https://ipapi.co/timezone
America/Chicago
Или:
$ curl http://ip-api.com/line?fields=timezone
America/Chicago
Вы можете показать дату и часовой пояс одновременно:
date +'%d/%m/%Y %H:%M:%S [%:z %Z]'
Иногда timedatectl set-timezone
не обновляет /etc/timezone
, поэтому лучше всего получить tiemzone из имени файла, на который указывает symlink /etc/timezone
:
#!/bin/bash
set -euo pipefail
if filename=$(readlink /etc/localtime); then
# /etc/localtime is a symlink as expected
timezone=${filename#*zoneinfo/}
if [[$timezone = "$filename" || ! $timezone =~ ^[^/]+/[^/]+$ ]]; then
# not pointing to expected location or not Region/City
>&2 echo "$filename points to an unexpected location"
exit 1
fi
echo "$timezone"
else # compare files by contents
# https://stackoverflow.com/questions/12521114/getting-the-canonical-time-zone-name-in-shell-script#comment88637393_12523283
find /usr/share/zoneinfo -type f ! -regex ".*/Etc/.*" -exec \
cmp -s {} /etc/localtime \; -print | sed -e 's@.*/zoneinfo/@@' | head -n1
fi
Ссылки: в этот ответ .
Использование TZ или даты НЕ ОТВЕТСТВЕТСТВЕННО, потому что она говорит вам часовой пояс пользователя, а не часовой пояс системы по умолчанию.
Часовой пояс системы по умолчанию хранится в /etc/time zone (что часто является символической ссылкой на файл данных часового пояса, специфичный для часового пояса). Если у вас нет /etc/timezone, посмотрите на /etc/localtime. Обычно это “серверный” часовой пояс. /etc/localtime часто является сим-ссылкой на файл часового пояса в /usr/share/zoneinfo. Этот путь к правильному файлу часового пояса часто даст вам информацию о географии, а также.
Новые linux имеют “timedatectl”, который дает вам тонны информации, когда команда выполняется.
(как боковой узел, если у вас есть древняя система, которая все еще использует старые жестко закодированные часовые пояса, вы, вероятно, можете скопировать современный файл часового пояса на него, и это будет работать. Мне приходилось делать это много раз, чтобы разрешить изменение часовых поясов на старом оборудовании).