Wie kann ich ein formatiertes Datum für einen UNIX-Zeitstempel über die Befehlszeile abrufen?

Ich habe einen UNIX-Zeitstempel und möchte ein formatiertes Datum erhalten (wie z Die Ausgabe von date) entspricht diesem Zeitstempel.

Meine bisherigen Versuche:

$ date +%s 1282367908 $ date -d 1282367908 date: invalid date `1282367908" $ date -d +1282367908 date: invalid date `+1282367908" $ date +%s -d +1282367908 date: invalid date `+1282367908" 

Ich möchte eine Ausgabe erhalten können wie:

$ TZ=UTC somecommand 1282368345 Sat Aug 21 05:25:45 UTC 2010 

Antwort

Unter Mac OS X und BSD:

$ date -r 1282368345 Sat Aug 21 07:25:45 CEST 2010 $ date -r 1282368345 +%Y-%m-%d 2010-08-21 

mit GNU-Kerntools (dafür müssen Sie die Info-Datei durchsuchen):

$ date -d @1282368345 Sat Aug 21 07:25:45 CEST 2010 $ date -d @1282368345 --rfc-3339=date 2010-08-21 

Fügen Sie entweder die Option -u (Standard) hinzu oder übergeben Sie eine TZ=UTC0 mit dem UTC-Datum (TZ=UTC0 definiert eine Zeitzone mit dem Namen UTC mit dem Offset 0 von UTC Das Verhalten für TZ=UTC (ohne Offset) ist nicht angegeben (obwohl sich auf den meisten Systemen auf ein systemdefiniertes System beziehen würde Zeitzone auch UTC mit Offset 0 von UTC)).

Kommentare

  • Es braucht viel Das Graben ist jedoch überraschend für eine so häufige Aufgabe.
  • Danke, akzeptierte Ihre Antwort. Ich hätte info coreutils date etwas genauer lesen sollen.
  • Dies gibt mir ein etwas anderes Datum: date -r 1447264553943 Ergebnisse in Wed Dec 28 01:39:03 BRST 47831, wenn ' tatsächlich 11/11/2015, 3:55:53 PM GMT-2:00 ist.
  • @falmp: Es funktioniert, wenn Sie Sekunden anstelle von Mikrosekunden verwenden.
  • @hop ops, hätte mit einem Jahr von 47831 rechnen sollen, aber diese Zahl war so hoch, dass ich sie verpasst habe. Danke!

Antwort

Dieser Perl-Einzeiler wird es tun:

$ perl -e "print scalar localtime $ARGV[0]" 1282367908 Sat Aug 21 09:18:28 2010 

Antwort

Nach einigem googeln habe ich einen Weg gefunden, dies mit der Befehl:

$ date --date "Jan 1, 1970 00:00:00 +0000 + 1282367908 seconds" Sat Aug 21 09:18:28 MSD 2010 

Kommentare

  • Danke dafür. Ich hatte gehofft, dass ' etwas Einfacheres sein würde, also nur eine Abstimmung für jetzt.
  • ein weiteres großartiges Beispiel dafür, wie Google Sie dumm macht. Liest niemand mehr die Dokumentation?
  • @hop, die Unterstützung für date -d @xxx wurde erst mit coreutils 5.3 im Jahr 2005 hinzugefügt. Diese ' So mussten Sie es vorher machen.
  • @St é phaneChazelas: a) Diese Antwort stammt aus dem Jahr 2010 und b) warum Entschuldigung googeln, bevor Sie die Dokumentation lesen? Wenn Sie von Ihrer eigenen Behörde aus antworten, kann man solche Fehler entschuldigen, aber wenn Sie es trotzdem nachschlagen müssen, schauen Sie es richtig nach.
  • @hop, ich habe nur darauf hingewiesen, dass dies nicht der Fall ist Eine dumme Antwort, nur eine veraltete.

Antwort

Mit eingebauten Shell:

  • zsh (4.1.1 (2003) und höher):

    $ zmodload zsh/datetime $ TZ=UTC0 strftime %c 1282368345 Sat 21 Aug 2010 05:25:45 UTC 
  • ksh93 (ksh93i (2000) und höher):

    $ TZ=UTC0 printf "%(%c)T\n" "#1282368345" Sat Aug 21 05:25:45 2010 
  • bash (4.2 (2010) und höher):

    $ TZ=UTC0 printf "%(%c)T\n" 1282368345 Sat 21 Aug 2010 05:25:45 UTC 

Ersetzen Sie in all diesen Fällen %c durch das gewünschte strftime() -Format.

Kommentare

Antwort

Unter osx in UTC

date -r "1475737200" -u 

Kommentare

  • Danke. Ich ' habe dies in der akzeptierten Antwort bearbeitet, damit die Informationen leichter verfügbar sind.

Antwort

Beantworte eine alte Frage, aber ich denke, dies könnte eine Verbesserung sein, wenn jemand anderes danach sucht. Diese Bash-Funktion funktioniert sowohl unter Linux als auch unter OS X. Ich habe auf keinem anderen BSD-System getestet. Übergeben Sie die Epochenzeit als Argument an diese Funktion und sie druckt das RFC-3339-Zeitformat.

epochtorfc3339 () { RFC3339_FORMAT="+%FT%T:::%z" EPOCH=$(echo $@ | sed -n "s/.*\([0-9]\{10\}\).*/\1/p"); if date --version >/dev/null 2>/dev/null; then # Linux date ${RFC3339_FORMAT} -d "1970-01-01 UTC ${EPOCH} seconds" #date -d @${EPOCH} --rfc-3339=seconds else # OS X/BSD date -r ${EPOCH} ${RFC3339_FORMAT} fi } 

Antwort

Ein weiteres gutes Beispiel für das reiche Erbe des modernen Unix. Dies ist in der Tat unter den meisten BSD-Varianten möglich:

$ TZ=UTC date -r 1282368345 Sat Aug 21 05:25:45 UTC 2010 

(Übrigens scheint Ihr Beispiel um eine Sekunde verschoben zu sein)

Kommentare

  • ' funktioniert unter Linux nicht. Die Antwort von hop ' scheint die richtige Linux-Antwort zu haben. Vielen Dank für den Hinweis, ich habe vermutet, dass so etwas passieren würde. ' habe es jetzt 45 Sekunden geschafft.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.