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.
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 .