Gibt es eine schnelle, einzeilige Möglichkeit, einen Unix-Zeitstempel über die Unix-Befehlszeile in ein Datum zu konvertieren?
date
könnte funktionieren, außer es ist ziemlich umständlich, jedes Element (Monat, Tag, Jahr, Stunde usw.) anzugeben, und ich kann nicht herausfinden, wie es richtig funktioniert. Es scheint, als gäbe es einen einfacheren Weg - vermisse ich etwas?
bash
shell
unix
unix-timestamp
Chimäre
quelle
quelle
Antworten:
Mit GNUs
date
können Sie:(Von: BASH: Unix-Zeitstempel in ein Datum konvertieren )
Unter OS X verwenden
date -r
.Alternativ verwenden
strftime()
. Es ist nicht direkt über die Shell verfügbar, aber Sie können über gawk darauf zugreifen . Der%c
Bezeichner zeigt den Zeitstempel in Abhängigkeit vom Gebietsschema an.quelle
date -d @1278999698 +'%Y-%m-%d %H:%M:%S'
Wobei die Zahl dahinter@
die Zahl in Sekunden istquelle
date -r 1278999698 +'%Y-%m-%d %H:%M:%S'
(GMT) oder einfachdate -r 1278999698
Diese Lösung funktioniert mit Datumsversionen, die nicht unterstützt werden
date -d @
. AWK oder andere Befehle sind nicht erforderlich . Ein Unix-Zeitstempel ist die Anzahl der Sekunden seit dem 1. Januar 1970 (UTC). Daher ist es wichtig, UTC anzugeben.Wenn Sie einen Mac verwenden, verwenden Sie:
Befehl zum Erhalten der Epoche:
Gutschrift geht an Anton: BASH: Unix-Zeitstempel in ein Datum konvertieren
quelle
Wie @TomMcKenzie in einem Kommentar zu einer anderen Antwort sagt,
date -r 123456789
handelt es sich wohl um eine häufigere (dh weiter verbreitete) einfache Lösung für Zeiten, die seit der Unix-Epoche als Sekunden angegeben wurden, aber leider gibt es keine universell garantierte tragbare Lösung.Die
-d
Option auf vielen Systemtypen bedeutet etwas völlig anderes als die--date
Erweiterung von GNU Date . Leider interpretiert GNU Date nicht-r
dasselbe wie diese anderen Implementierungen. Leider müssen Sie wissen, welche Versiondate
Sie verwenden, und viele ältere Unix-date
Befehle unterstützen keine der beiden Optionen.Schlimmer noch, POSIX
date
erkennt weder-d
noch-r
und bietet in keinem Befehl (den ich kenne) eine Standardmethode zum Formatieren einer Unix-Zeit über die Befehlszeile (da POSIX Awk ebenfalls fehltstrftime()
). (Sie können nicht verwendentouch -t
undls
weil erstere keine Zeit akzeptieren, die seit der Unix-Epoche als Sekunden angegeben wurde.)Beachten Sie, dass The One True Awk, das direkt von Brian Kernighan erhältlich ist, jetzt über
strftime()
eine integriertesystime()
Funktion sowie eine Funktion zum Zurückgeben der aktuellen Zeit in Sekunden seit der Unix-Epoche verfügt. Daher ist die Awk-Lösung möglicherweise die portabelste.quelle
Wenn Sie die Notation als unangenehm
-R
empfinden, hilft möglicherweise die Option -option. Das Datum wird im RFC 2822-Format ausgegeben. Sie benötigen also nicht alle diese Kennungen :date -d @1278999698 -R
. Eine andere Möglichkeit besteht darin, das Datum in Sekunden in Ihrem Gebietsschema auszugeben :date -d @1278999698 +%c
. Sollte leicht zu merken sein. :-)quelle
Leichte Korrektur der obigen Antwort von dabest1. Geben Sie die Zeitzone als UTC und nicht als GMT an:
Der zweite ist richtig. Ich denke, der Grund dafür ist, dass in Großbritannien die Sommerzeit von 1968 bis 1971 kontinuierlich in Kraft war.
quelle
Die Standard-Perl-Lösung lautet:
(oder Ortszeit, falls bevorzugt)
quelle
quelle
Andere Beispiele hier sind schwer zu merken. Im einfachsten Fall:
quelle
Geben Sie Folgendes in Ihr ~ / .bashrc ein:
Anwendungsbeispiel:
quelle
Python:
quelle