Konvertiert Unix timestamp in ein Datum-string
Gibt es eine schnelle, one-liner-Weg zu konvertieren eine Unix-timestamp für ein Datum in das Unix-Kommando-Zeile?
date
funktionieren könnte, außer, dass es ziemlich umständlich, um geben Sie jedes element (Tag, Monat, Jahr, Stunde, etc.), und ich kann nicht herausfinden, wie man es richtig zu arbeiten. Wie es scheint, gibt es möglicherweise einen einfacheren Weg - bin ich etwas fehlt?
- mögliche Duplikate von Wie konvertieren von timestamps, um Termine in der bash?
InformationsquelleAutor chimeracoder | 2010-07-14
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit GNU ' s
date
Sie tun können:(Aus: BASH: Umwandeln von Unix Timestamp in ein Datum)
Unter OS X verwenden Sie
date -r
.Nutzen Sie alternativ
strftime()
. Es ist nicht direkt aus der shell, aber Sie darauf zugreifen können über gawk. Die%c
- Bezeichner zeigt den Zeitstempel in eine locale-abhängigen Art und Weise.date -d @1278999698 +'%Y-%m-%d %H:%M:%S'
Wobei die Zahl hinter
@
ist, ist die Zahl in Sekundendate -r 1278999698 +'%Y-%m-%d %H:%M:%S'
(GMT) oder einfachdate -r 1278999698
Diese Lösung funktioniert mit den Versionen von date nicht unterstützen
date -d @
. Es erfordert nicht AWK oder andere Befehle. Ein Unix timestamp ist die Anzahl der Sekunden seit dem Jan 1, 1970, UTC, so ist es wichtig zu UTC angeben.Wenn Sie auf einem Mac arbeiten, dann nutzen Sie:
Befehl für die erste Epoche:
Kredit geht an Anton: BASH: Umwandeln von Unix Timestamp in ein Datum
Als @TomMcKenzie sagt in einem Kommentar zu einer anderen Antwort,
date -r 123456789
ist wohl ein häufiger (d.h. in größerem Umfang durchgeführt) einfache Lösung für Zeiten als Sekunden seit der Unix-Epoche, aber leider gibt es keine universal-garantiert tragbare Lösung.Den
-d
option auf viele Arten von Systemen bedeutet etwas ganz anderes als GNU Date ist--date
Erweiterung. Leider GNU Date nicht interpretieren-r
dasselbe wie diese anderen Implementierungen. So muss man leider wissen, welche version vondate
Sie verwenden, und viele ältere Unix -date
Befehle nicht unterstützen, entweder die option.Sogar noch schlimmer, POSIX
date
erkennt weder-d
noch-r
und bietet keine standard-Weg, in jedem Befehl an alle (die ich kenne) zu formatieren einen Unix-Zeit aus der command-line (da POSIX-Awk fehlt auchstrftime()
). (Sie können nicht verwendentouch -t
undls
weil erstere nicht akzeptieren, eine Zeit gegeben, als Sekunden seit der Unix-Epoche.)Hinweis wenn Die One True Awk direkt von Brian Kernighan hat jetzt die
strftime()
Funktion built-in sowie einesystime()
Funktion geben Sie die aktuelle Uhrzeit in Sekunden seit der Unix-Epoche), so vielleicht die Awk-Lösung ist, die meisten tragbaren.Wenn Sie die notation umständlich, vielleicht die
-R
-option hilft. Es outpouts das Datum im RFC 2822-format. So brauchen Sie nicht alle diese Bezeichner:date -d @1278999698 -R
. Eine weitere Möglichkeit ist die Ausgabe des Datums in Sekunden in Ihrem Gebietsschema:date -d @1278999698 +%c
. Sollte leicht zu merken sein. 🙂Leichte Korrektur zu dabest1 die Antwort von oben. Festlegen der Zeitzone als UTC, nicht GMT:
Die zweite ist korrekt. Ich denke der Grund dafür ist, dass in Großbritannien die Sommerzeit in Kraft war ständig von 1968 bis 1971.
Andere Beispiele sind hier schwer zu merken. In seiner einfachsten Form:
Den standard-Perl-Lösung:
(oder localtime, wenn bevorzugt)
Setzen Sie Folgendes in Ihre ~/.bashrc :
Beispiel: