2011-07-11 04:57:39 +0000 2011-07-11 04:57:39 +0000
135
135

Как проверить, в каком часовом поясе Linux?

Есть ли способ проверить, в каком часовом поясе я нахожусь в настоящее время под Linux?

Ответы (12)

252
252
252
2011-07-11 05:01:26 +0000

Если вы имеете в виду с консоли, просто введите:

date +%Z
```.
58
58
58
2015-02-13 16:22:27 +0000

Если вы хотите цифровой часовой пояс:

date +'%:z %Z'

Образец вывода:

-05:00 EST
26
26
26
2013-08-31 09:58:18 +0000

Вместо этого я хотел найти часовой пояс в форме “США/Восток” или “Европа/Лондон”. Вы можете найти это в:

  • /etc/timezone (присутствует на Ubuntu и Red Hat? но не, например, на Amazon Linux)
  • (на системах в стиле Red Hat) как ZONE="US/Eastern" в /etc/sysconfig/clock
  • или вы можете попробовать сопоставить /etc/localtime с одним из файлов в /usr/share/zoneinfo; раздражает то, что это не похоже на сим-ссылку, но вы можете, например.
21
21
21
2011-07-11 04:59:58 +0000

Обычно, переменная окружения TZ скажет вам что-то полезное. Тем не менее, лучше всего использовать такие функции, как mktime() и localtime() для преобразования между time_t и локальным представлением часового пояса. То есть не пытайтесь делать преобразование самостоятельно.

13
13
13
2016-05-10 10:50:27 +0000

Для убунту попробуйте это :

$ cat /etc/timezone

Вывод выборки :

Asia/Kolkata

Для других дистрибутивов Ссылка : https://unix.stackexchange.com/questions/110522/timezone-setting-in-linux

7
7
7
2016-09-13 21:16:56 +0000

Иногда вы можете искать канонический часовой пояс, а не короткую форму, как производится 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
4
4
4
2015-07-22 04:58:52 +0000
$ strings /etc/localtime | tail -n 1
MST7MDT,M3.2.0,M11.1.0

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

3
3
3
2018-07-01 14:02:51 +0000

Для часового пояса можно использовать геолокацию:

$ curl https://ipapi.co/timezone
America/Chicago

Или:

$ curl http://ip-api.com/line?fields=timezone
America/Chicago

_COPY14_zone

1
1
1
2018-04-16 15:36:04 +0000

Пара решений:

date +"%Z %z"
timedatectl | grep "Time zone"
cat /etc/timezone

дали мне (соответственно):

UTC +0000
Time zone: Etc/UTC (UTC, +0000)
Etc/UTC

Мой компьютер на UTC.

0
0
0
2018-08-05 07:51:54 +0000

Вы можете показать дату и часовой пояс одновременно:

date +'%d/%m/%Y %H:%M:%S [%:z %Z]'
0
0
0
2018-06-26 06:54:56 +0000

Иногда 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

Ссылки: в этот ответ .

0
0
0
2017-11-15 00:31:57 +0000

Использование TZ или даты НЕ ОТВЕТСТВЕТСТВЕННО, потому что она говорит вам часовой пояс пользователя, а не часовой пояс системы по умолчанию.

Часовой пояс системы по умолчанию хранится в /etc/time zone (что часто является символической ссылкой на файл данных часового пояса, специфичный для часового пояса). Если у вас нет /etc/timezone, посмотрите на /etc/localtime. Обычно это “серверный” часовой пояс. /etc/localtime часто является сим-ссылкой на файл часового пояса в /usr/share/zoneinfo. Этот путь к правильному файлу часового пояса часто даст вам информацию о географии, а также.

Новые linux имеют “timedatectl”, который дает вам тонны информации, когда команда выполняется.

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

関連する質問

6
10
5
37
5