Ich benötige einen Shell-Befehl oder ein Shell-Skript, das einen Unix-Zeitstempel in ein Datum konvertiert. Die Eingabe kann entweder vom ersten Parameter oder von stdin stammen, wobei die folgenden Verwendungsmuster berücksichtigt werden:
ts2date 1267619929
und
echo 1267619929 | ts2date
Beide Befehle sollten "Wed Mar 3 13:38:49 2010" ausgeben.
bash
date
unix-timestamp
Chiborg
quelle
quelle
date -d @$(date -u +%s)
@
? Ich sehe das überhaupt nicht in der GNU-Manpage.brew install coreutils; gdate -d @1267619929
info 'Date input formats'
Sie gelangen direkt zumdate
Formatierungsinfoknoten mit dem entsprechenden Robert Grudin-Zitat und einem Menü mit Formatspezifizierern.funktioniert für mich unter Mac OS X.
quelle
Diese Version ähnelt der Antwort von Chiborg , macht jedoch externe
tty
und überflüssigcat
. Es verwendetdate
, könnte aber genauso einfach verwendengawk
. Sie können den Shebang ändern und die doppelten eckigen Klammern durch einzelne ersetzen. Dies wird auch ausgeführtsh
.quelle
gawk
ist es (ungefähr) 15% schneller alsdate
in einer Zeitschleifefor
, die nur ausgawk 'BEGIN { print strftime("%c", 1256571985); }'
oderdate -d '@1256571985' +%c
mit umgeleiteter Ausgabe besteht/dev/null
.Sie können beispielsweise das GNU-Datum verwenden
oder
quelle
Sie können dieses einfache awk-Skript verwenden:
Beispielnutzung:
quelle
date -s @
nicht undawk
funktioniert immer noch! Ein Beispiel ohne Standard wäre auch hilfreich.Seit 4.2 Bash können Sie mit
printf
‚s -%(datefmt)T
Format:Das ist schön, weil es eine eingebaute Shell ist. Das Format für datefmt ist eine Zeichenfolge, die von
strftime(3)
(sieheman 3 strftime
) akzeptiert wird . Hier%c
ist:Wenn Sie nun ein Skript möchten, das ein Argument akzeptiert und, falls keines angegeben ist, stdin liest, können Sie wie folgt vorgehen:
quelle
Ich verwende dies beim Konvertieren oder Überwachen von Protokolldateien:
quelle
awk '{ printf strftime("%c: ", $1); $1 = ""; print $0; }'
In OSX oder BSD gibt es ein gleichwertiges
-r
Flag, das anscheinend einen Unix-Zeitstempel benötigt. Hier ist ein Beispiel, das Datum viermal ausführt: einmal für das erste Datum, um zu zeigen, was es ist; eine für die Konvertierung in einen Unix-Zeitstempel mit%s
und schließlich eine, die mit-r
konvertiert, was%s
zurück in einen String liefert.Zumindest scheint auf meiner Maschine zu funktionieren.
quelle
Sie können das formatierte Datum aus einem solchen Zeitstempel abrufen
quelle
Ich habe ein Skript geschrieben, das dies selbst macht:
quelle
In dieser Antwort kopiere ich die Antwort von Dennis Williamson und ändere sie leicht, um eine enorme Geschwindigkeitssteigerung zu ermöglichen, wenn eine Spalte mit vielen Zeitstempeln an das Skript weitergeleitet wird. Das Weiterleiten von 1000 Zeitstempeln an das ursprüngliche Skript mit xargs -n1 auf meinem Computer dauerte beispielsweise 6,929 Sekunden im Gegensatz zu 0,027 Sekunden bei dieser modifizierten Version:
quelle
ein Beispiel:
quelle
Ich benutze diesen plattformübergreifenden Einzeiler:
Es sollte sowohl in macOS als auch in späteren Versionen gängiger Linux-Distributionen funktionieren.
quelle
Das folgende Skript ist zwar kein reines Bash, konvertiert jedoch Zeitstempel der Länge 13 in einer Zeichenfolge mithilfe von Perl in das entsprechende Datum in Ihrer lokalen Zeitzone
timestamp_to_date.sh
Eingang
Ausgabe
quelle
In PHP
quelle