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

Jak sprawdzić, w której strefie czasowej w Linuksie?

Czy istnieje sposób na sprawdzenie, w której strefie czasowej aktualnie znajduję się w Linuksie?

Risposte (12)

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

Jeśli masz na myśli konsolę, po prostu wpisz:

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

Jeśli chcesz numeryczną strefę czasową:

date +'%:z %Z'

Wyjście próbne:

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

Zamiast tego chciałem znaleźć strefę czasową w formie “US/Eastern” lub “Europe/Londyn”. Możesz to znaleźć w:

  • /etc/timezone (obecne na Ubuntu i Red Hat? ale nie np. Amazon Linux)
  • (na systemach w stylu Red Hat) jak ZONE="US/Eastern" w /etc/sysconfig/clock
  • lub możesz spróbować dopasować /etc/localtime do jednego z plików w /usr/share/zoneinfo; irytująco nie wydaje się to być symlink, ale możesz np.
21
21
21
2011-07-11 04:59:58 +0000

Zazwyczaj zmienna środowiskowa TZ powie Ci coś użytecznego. Jednakże, najlepiej jest użyć funkcji takich jak mktime() i localtime() do konwersji pomiędzy time_t a lokalną reprezentacją strefy czasowej. To znaczy, nie próbuj samemu dokonać konwersji.

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

Dla ubuntu spróbuj tego :

$ cat /etc/timezone

Wyjście próbki :

Asia/Kolkata

Dla innego dystryktu Odniesienie : https://unix.stackexchange.com/questions/110522/timezone-setting-in-linux

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

Czasami możesz szukać raczej kanonicznej strefy czasowej niż krótkiej formy, jaką produkuje date %Z np. US/Eastern. Na systemach z timedatectl, np. Fedora, timedatectl daje wiele użytecznych informacji, w tym bieżącą strefę czasową:

# 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

Niestety, timedatectl przyjmuje set-timezone jako komendę, ale nie ma odpowiadającego jej get-timezone. Przetwarzaj go w następujący sposób:

# 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

So I’m on Mountain Time. Chociaż powyższe rady dotyczące używania zmiennych środowiskowych lub po prostu wyjścia polecenia daty czasami działają lepiej, w zależności od tego, jak chcesz tego użyć.

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

Dla strefy czasowej można użyć geolokalizacji:

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

lub:

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

http://wiki.archlinux.org/index.php/time#Time\_zone

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

Kilka rozwiązań:

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

dał mi (odpowiednio):

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

Mój komputer jest na UTC.

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

Możesz pokazać datę i strefę czasową jednocześnie:

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

Czasami timedatectl set-timezone nie aktualizuje /etc/timezone , więc najlepiej pobrać tiemzone z nazwy pliku, który symlink /etc/timezone wskazuje na:

#!/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

Referencje: w tej odpowiedzi .

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

Używanie TZ lub daty NIE JEST ODPOWIEDZIALNE, ponieważ mówi ona o strefie czasowej UŻYTKOWNIKA, a nie o domyślnej strefie czasowej systemu.

Domyślna strefa czasowa systemu jest przechowywana w /etc/timezone (co często jest symbolicznym łączem do pliku danych strefy czasowej specyficznego dla tej strefy). Jeżeli nie posiadasz pliku /etc/timezone, spójrz na plik /etc/localtime. Ogólnie jest to strefa czasowa “serwera”. /etc/localtime jest często połączeniem z plikiem strefy czasowej w /usr/share/zoneinfo. Ścieżka do właściwego pliku strefy czasowej często daje także informacje geograficzne.

Nowsze linuksy mają “timedatectl”, który daje mnóstwo informacji podczas wykonywania polecenia.

(jako węzeł boczny, jeśli masz starożytny system, który nadal używa twardych stref czasowych OLD, prawdopodobnie możesz skopiować na niego nowoczesny plik strefy czasowej i będzie on działał. Musiałem to robić wiele razy, aby rozwiązać problem zmiany stref czasowych na starszym sprzęcie).