GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann `date` die Uhrzeit aus einer anderen Zeitzone ausgeben?

Ich habe einen Server, dessen Zeitzone auf UTC eingestellt ist . Es schien, als wäre das im Allgemeinen eine gute Praxis (bitte korrigieren Sie mich, wenn ich falsch liege).

Wie auch immer, einer der Server, zu denen ich mich verbinde, um scp Dateien, läuft auf EDT und speichert Dateien, die ich kopieren muss, im Format /path/to/filename/data20120913

Ich habe versucht, rsync zu versuchen Dateien mit so etwas wie -mtime -1 von find Flag für Dateien, die am letzten Tag geändert wurden, aber ich hatte kein Glück.

Ich habe nichts dagegen, einfach scp zu verwenden um die Datei des aktuellen Tages zu kopieren, aber im Moment gibt es ein 4-Stunden-Fenster, in dem date +%Y%m%d ausgeführt wird wird auf jedem Server einen anderen Tag geben und das nervt mich ein wenig.

man date durchsehen Ich sehe, dass ich die Uhrzeit als UTC ausgeben lassen kann , aber ich sehe keine Möglichkeit, es als eine andere Zeitzone wie EDT auszugeben

Ich nehme an, ich könnte auch so etwas wie GNU verwenden Datumserweiterung date -d 20100909 +%s Um das Datum in Sekunden aus der Epoche zu erhalten, wenden Sie einen manuellen 4 * 60 * 60 an zweite Berechnung, und versuchen Sie, das als Datum darzustellen – aber wenn die Sommerzeit beginnt, ist es immer noch eine Stunde daneben.

Gibt es eine einfachere Möglichkeit, das Datum in einem YYYYMMDD auszugeben? Format für EDT auf einem Server, der auf UTC eingestellt ist ?

Akzeptierte Antwort:

Sie können eine Zeitzone für die Dauer der Abfrage festlegen, also:

TZ=America/New_York date

Beachten Sie den Leerraum zwischen TZ Einstellung und das date Befehl. In Bourne-ähnlichem und rc -ähnliche Shell, die den TZ setzt Variable nur für die Kommandozeile. In anderen Shells (csh , tcsh , fish ), können Sie immer die env verwenden Befehl stattdessen:

env TZ=America/New_York date

tl;dr

Auf Linux-Systemen. Zeitzonen werden in Dateien in /usr/share/zoneinfo definiert Verzeichnis. Diese Struktur wird oft als „Olson-Datenbank“ bezeichnet, um ihren Gründungsmitglied zu ehren.

Die Regeln für jede Zeitzone werden als Textdateizeilen definiert, die dann in eine Binärdatei kompiliert werden. Die so kompilierten Zeilen definieren den Zonennamen; ein Daten- und Zeitbereich, in dem die Zone gilt; ein Offset von UTC für die Standardzeit; und die Notation zum Definieren, wie der Übergang zur und von der Sommerzeit erfolgt, falls zutreffend.

Beispielsweise enthält das Verzeichnis „Amerika“ die erforderlichen Informationen für New York in der Datei America/New_York wie oben verwendet.

Beachten Sie, dass die Angabe einer nicht vorhandenen Zone (Dateiname) stillschweigend ignoriert und UTC-Zeiten gemeldet werden. Beispielsweise wird hier eine falsche Zeit gemeldet:

TZ="America/New York" date ### WRONG ###

Die Single UNIX Specification, Version-3, bekannt als SUSv3 oder POSIX-2001, weist darauf hin, dass aus Gründen der Portabilität die Zeichenfolge, die die Zeitzonenbeschreibung identifiziert, mit einem Doppelpunkt beginnen sollte. Daher können wir auch schreiben:

TZ=":America/New_York" date
TZ=":America/Los_Angeles" date

Als alternative Methode zur Angabe von Zeitzonen über einen Pfadnamen zu einer Beschreibungsdatei beschreibt SUSv3 das POSIX-Modell. In diesem Format ist eine Zeichenfolge definiert als:

std offset [dst[offset][,start-date[/time],end-date[/time]]]

wobei std ist der Standardkomponentenname und dst ist die Sommerzeit. Jeder Name besteht aus drei oder mehr Zeichen. Der offset ist positiv für Zeitzonen westlich des Nullmeridians und negativ für Zeitzonen östlich des Meridians. Der Offset wird zur Ortszeit addiert, um UTC (früher bekannt als GMT) zu erhalten. Der start und end Zeitfelder geben an, wann die Standard-/Tageslicht-Übergänge stattfinden.

Verwandt:Excel – Vorhersage des zukünftigen Datums basierend auf der durchschnittlichen Anzahl von Tagen zwischen einer variablen Anzahl von Daten in der Vergangenheit?

Im Osten der Vereinigten Staaten ist die Standardzeit beispielsweise 5 Stunden früher als UTC, und wir können EST5EDT angeben anstelle von America/New_York . Diese Alternativen werden jedoch nicht immer erkannt, insbesondere für Zonen außerhalb der Vereinigten Staaten, und sollten am besten vermieden werden.

HP-UX (ein SUSv3-kompatibles UNIX) verwendet Textregeln in /usr/lib/tztab und die POSIX-Namen wie EST5EDT, CST6CDT, MST7MDT, PST8PDT. Die Datei enthält alle historischen Regeln für jede Zeitzone, ähnlich der Olson-Datenbank.

HINWEIS: Sie sollten in der Lage sein, alle Zeitzonen zu finden, indem Sie das folgende Verzeichnis untersuchen:/usr/share/zoneinfo .


Linux
  1. So synchronisieren Sie Datum und Uhrzeit über die Befehlszeile in Ubuntu

  2. Wie setze ich eine Variable gleich der Ausgabe eines Befehls in Grub2?

  3. Wie kann ich die Zeit von der Befehlszeile aus verfolgen?

  4. Stellen Sie Datum, Uhrzeit und Zeitzone auf einem Linux-Server ein

  5. CentOS / RHEL :So erhalten Sie das Datum und die Uhrzeit des ausgeführten Befehls in der Verlaufsbefehlsausgabe

So erhalten Sie das aktuelle Datum und die aktuelle Uhrzeit in Python

So stellen Sie die Zeitzone in CentOS 7 ein

So ändern Sie Datum, Uhrzeit und Zeitzone in Ubuntu 20.04 LTS

So stellen Sie Datum, Uhrzeit und Zeitzone in RHEL 8 ein

Überprüfen Sie die Zeitzone in Linux

Zeitanzeige zeigt Datum/Uhrzeit nicht an?