Wie überprüfe ich welche Zeitzone unter Linux?

129

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

Peter Mortensen
quelle

Antworten:

19

Normalerweise TZsagt Ihnen die Umgebungsvariable etwas Nützliches. Es ist jedoch am besten, Funktionen wie mktime()und localtime()zum Konvertieren zwischen time_tund einer lokalen Zeitzonendarstellung zu verwenden. Das heißt, versuchen Sie nicht, die Konvertierung selbst durchzuführen .

Greg Hewgill
quelle
2
Gibt es einen Befehl, der die Zeitzone angibt, in der sich der Benutzer befindet?
26
Klar, datewerde ich dir sagen.
Greg Hewgill
Ich habe zwei Instanz des Servers, wenn ich "Datum" -Befehl in beiden Servern gibt, zeigt es unterschiedliche Zeit. Zeitzone für beide Server ist IST, Zeit eines Servers: Mo 11.07. 10:39:31 IST 2011 und anderer Server Mo 11.07. 10:35:31 IST 2011 .. Es gibt eine Differenz von 4 Minuten
8
On Precise Pangolin echo $TZgibt nichts für mich zurück.
Iain Samuel McLean Elder
3
@ GregHewgill Ihre Antwort ist auf den ersten Blick nicht hilfreich. Erwägen Sie, Ihre Antwort zu bearbeiten. Siehe die am häufigsten gestimmte Antwort unten. Ich werde Ihre Antwort vorerst ablehnen. Außerdem gibt es auf meinen Rechnern standardmäßig kein TZ env.
Therealmarv
244

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

date +%Z
Rasman
quelle
2
gut, funktioniert gut.
Silver Moon
15
Dies sollte die akzeptierte Antwort sein
KalenGi
good point ... hat die Antwort dahingehend geändert
Rasman
Und um die Zeitzone über die Befehlszeile in Ubuntu festzulegen
Dan Nissenbaum
Das gibt es +07für mich. Um Region/Cityauf ein Debian / Arch-basiertes Linux zuzugreifen, lesen Sie diese Antwort .
Tom Hale
54

Wenn Sie die numerische Zeitzone wollen:

date +'%:z %Z'

Beispielausgabe:

-05:00 EST
Paul Vargas
quelle
7
Unter OS X wird dies :z EST
suspectus
7
Dies gilt für Linux .
Paul Vargas
1
Genauer gesagt gilt dies für GNU date. Die BusyBox-Version gibt etwas Unsinniges aus, in meinem Fall "%: z CEST".
Léo Lam
Datum +% z funktioniert unter OS X jedoch einwandfrei. Ich empfehle, die Antwort zu ändern.
Neil Mayhew
1
Hi, @NeilMayhew Danke! Humm ... aber die Frage hat die Tagslinux ubuntu-10.04
Paul Vargas
24

Ich wollte die Zeitzone stattdessen in der Form "US / Eastern" oder "Europe / London" finden. Sie finden dies in:

  • / etc / timezone (vorhanden auf Ubuntu und Red Hat? aber nicht zB Amazon Linux)
  • (auf Red Hat-Systemen) wie 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 du kannst zb

    cd / usr / share / zoneinfo
    find * -Typ f -exec sh -c "diff -q / etc / localtime '{}'> / dev / null && echo {}" \;

    passende Dateien zu finden - es gibt wahrscheinlich bessere Möglichkeiten, dies zu tun, aber das funktioniert. Es wird mehrere Übereinstimmungen geben.

Rup
quelle
4
find /usr/share/zoneinfo/ -type f| xargs md5sum | grep $(md5sum /etc/localtime | cut -d' ' -f1)
Freiheit
6

Manchmal suchen Sie nach der kanonischen Zeitzone und nicht nach der Kurzform, wie sie date %Zz US/Eastern. Auf Systemen mit timedatectlzB Fedora werden timedatectlviele nützliche Informationen ausgegeben, 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 timedatectlnimmt set-timezoneals Befehl, hat aber keine entsprechend get-timezone. Analysieren Sie es wie folgt:

# timedatectl status | grep "zone" | sed -e 's/^[ ]*Time zone: \(.*\) (.*)$/\1/g'`
US/Eastern
Raman
quelle
4
$ strings /etc/localtime | tail -n 1
MST7MDT,M3.2.0,M11.1.0

Also bin ich in den Bergen. Die obigen Hinweise zur Verwendung von Umgebungsvariablen oder zur Ausgabe von Befehlen mit Datum funktionieren manchmal besser, je nachdem, wie Sie diese verwenden möchten.

Tagar
quelle
3

Für die Zeitzone können Sie Geolocation 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

Steven Penny
quelle
2
  • / etc / sysconfig / clock legt fest, ob die Hardware-Uhr als UTC oder als lokale Zeit gespeichert wird.
  • Verknüpfen Sie / etc / localtime mit / usr / share / zoneinfo / ..., um Ihre Zeitzone festzulegen.
  • Geben Sie ein /sbin/hwclock --systohc [--utc], um die Hardware-Uhr einzustellen.

Der Linux-Kernel speichert und berechnet die Zeit immer als Anzahl von Sekunden seit Mitternacht des 1. Januar 1970 UTC, unabhängig davon, ob Ihre Hardware-Uhr als UTC gespeichert ist oder nicht. Umrechnungen zu Ihrer Ortszeit werden zur Laufzeit durchgeführt. Eine nette Sache dabei ist, dass, wenn jemand Ihren Computer mit einer anderen Zeitzone verwendet, er die Umgebungsvariable TZ festlegen kann und alle Datums- und Uhrzeitangaben für seine Zeitzone korrekt angezeigt werden.

Wenn die Anzahl der Sekunden seit dem 1. Januar 1970 UTC als vorzeichenbehaftete 32-Bit-Ganzzahl gespeichert ist (wie auf Ihrem Linux / Intel-System), funktioniert Ihre Uhr ab dem Jahr 2038 nicht mehr. Linux hat kein inhärentes Y2K-Problem , aber es hat ein Jahr 2038 Problem. Hoffentlich werden wir bis dahin alle Linux auf 64-Bit-Systemen ausführen. 64-Bit-Ganzzahlen sorgen dafür, dass unsere Uhren bis ungefähr 292271-Millionen gut laufen.

Rup
quelle
1

Einige Lösungen:

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

gab mir (bzw.):

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

Mein Computer ist auf UTC.

tika
quelle
0

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

Die Standard-System-Zeitzone ist in / etc / timezone gespeichert (dies ist häufig eine symbolische Verknüpfung zu der für die Zeitzone spezifischen Datendatei). Wenn Sie keine / etc / timezone haben, schauen Sie unter / etc / localtime nach. Im Allgemeinen ist dies die Zeitzone des Servers. / etc / localtime ist häufig ein Symlink zu einer Zeitzonendatei in / usr / share / zoneinfo. Dieser Pfad zur richtigen Zeitzonendatei gibt Ihnen häufig auch Geografiedaten.

Neuere Linux-Versionen haben "timedatectl", das Ihnen jede Menge Informationen liefert, wenn der Befehl ausgeführt wird.

(Wenn Sie als Nebenknoten ein altes System haben, das immer noch die ALTEN fest codierten Zeitzonen verwendet, können Sie wahrscheinlich eine moderne Zeitzonendatei darauf kopieren, und es wird funktionieren. Ich musste dies viele Male tun, um wechselnde Zeitzonen aufzulösen bei älteren Geräten).

TekOps
quelle
0

Manchmal wird timedatectl set-timezonedas Update nicht durchgeführt./etc/timezone Daher ist es am besten, die Zeitzone aus dem Namen der Datei zu ermitteln, auf die der Symlink /etc/timezoneverweist:

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

Referenzen: in dieser Antwort .

Tom Hale
quelle
0

Sie können Datum und Zeitzone gleichzeitig anzeigen:

date +'%d/%m/%Y  %H:%M:%S [%:z  %Z]'
Mohsen Abasi
quelle