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

Wie kann man unter Linux überprüfen, in welcher Zeitzone ich mich gerade befinde?

Advertisement

Gibt es eine Möglichkeit, unter Linux zu überprüfen, in welcher Zeitzone ich mich gerade befinde?

Advertisement
Advertisement

Antworten (12)

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

Wenn Sie von der Konsole aus meinen, geben Sie einfach ein:

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

Wenn Sie die numerische Zeitzone wünschen:

date +'%:z %Z'

Beispielausgabe:

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

Ich wollte die Zeitzone stattdessen in der Form “US/Eastern” oder “Europa/London” finden. Sie können dies finden in:

  • /etc/timezone (auf Ubuntu und Red Hat? vorhanden, aber nicht z.B. Amazon Linux)
  • (auf Systemen im Red Hat-Stil) als ZONE="US/Eastern" in /etc/sysconfig/clock
  • oder Sie können versuchen, /etc/localtime mit einer der Dateien unter /usr/share/zoneinfo abzugleichen; ärgerlicherweise scheint dies kein Symlink zu sein, aber Sie können z.B.
21
21
21
2011-07-11 04:59:58 +0000

Normalerweise wird Ihnen die Umgebungsvariable TZ etwas Nützliches sagen. Es ist jedoch am besten, Funktionen wie mktime() und localtime() zu verwenden, um zwischen time_t und einer lokalen Zeitzonendarstellung zu konvertieren. Das heißt, versuchen Sie nicht, die Konvertierung selbst durchzuführen.

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

Für Ubuntu versuchen Sie dies :

$ cat /etc/timezone

Beispielausgabe :

Asia/Kolkata

Für andere Distro Referenz : https://unix.stackexchange.com/questions/110522/timezone-setting-in-linux

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

Manchmal suchen Sie vielleicht eher nach der kanonischen Zeitzone als nach der Kurzform, wie sie z.B. von date %Z produziert wird. Auf Systemen mit US/Eastern, z.B. Fedora, gibt timedatectl viele nützliche Informationen aus, einschließlich der aktuellen Zone:

# 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

Leider nimmt timedatectl timedatectl als Befehl, hat aber keine entsprechende set-timezone. Analysieren Sie sie wie folgt:

# timedatectl status | grep "zone" | sed -e 's/^[]*Time zone: \(.*\) (.*)$//g'`
US/Eastern
4
Advertisement
4
4
2015-07-22 04:58:52 +0000
Advertisement
$ strings /etc/localtime | tail -n 1
MST7MDT,M3.2.0,M11.1.0

Ich bin also bei Mountain Time. Obwohl die obigen Ratschläge zur Verwendung von Umgebungsvariablen oder einfach der Ausgabe von Datumsbefehlen manchmal besser funktionieren, je nachdem, wie Sie diese verwenden wollen.

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

Für die Zeitzone können Sie die Geolokalisierung verwenden:

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

oder:

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

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

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

Ein paar Lösungen:

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

gab mir (jeweils):

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

Mein Computer ist auf UTC.

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

Sie können das Datum und die Zeitzone gleichzeitig anzeigen:

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

Manchmal aktualisiert timedatectl set-timezone nicht /etc/timezone , daher ist es am besten, die Tiemzone aus dem Namen der Datei zu ermitteln, auf die der Symlink /etc/timezone zeigt:

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

Verweise: in dieser Antwort .

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

Die Verwendung von TZ oder Datum IST NICHT ZUVERLÄSSIG, da sie Ihnen die Zeitzone des BENUTZERS und nicht die Standard-Systemzeitzone angibt.

Die Standard-Systemzeitzone wird in /etc/timezone gespeichert (was oft ein symbolischer Link zu der für die Zeitzone spezifischen Zeitzonendatendatei ist). Wenn Sie keine /etc/timezone haben, sehen Sie sich /etc/localtime an. Im Allgemeinen ist das die Zeitzone des “Servers”. /etc/localtime ist oft ein Symlink zu einer Zeitzonendatei in /usr/share/zoneinfo. Dieser Pfad zu der korrekten Zeitzonendatei wird Ihnen oft auch geographische Informationen liefern.

Neuere Linux-Systeme haben “timedatectl”, das Ihnen tonnenweise Informationen liefert, wenn der Befehl ausgeführt wird.

(als Nebenknoten, wenn Sie ein altes System haben, das immer noch die hart kodierten OLD-Zeitzonen benutzt, können Sie wahrscheinlich eine moderne Zeitzonendatei darauf kopieren und es wird funktionieren. Ich musste das schon viele Male tun, um wechselnde Zeitzonen auf älteren Geräten zu lösen).

Advertisement

Verwandte Fragen

6
10
5
37
4
Advertisement