397 Stimmen

Wie konvertiert man in der Bash Zeitstempel in Daten?

Ich brauche einen Shell-Befehl oder ein Skript, das einen Unix-Zeitstempel in ein Datum umwandelt. Die Eingabe kann entweder über den ersten Parameter oder über stdin erfolgen, so dass die folgenden Verwendungsmuster möglich sind:

ts2date 1267619929

y

echo 1267619929 | ts2date

Beide Befehle sollten "Wed Mar 3 13:38:49 2010" ausgeben.

754voto

a'r Punkte 34107

Auf Systemen mit GNU Coreutils >= 5.3.0, z.B. Linux können Sie verwenden:

date -d @1267619929

240voto

rafaelzlisboa Punkte 2390
date -r <number>

funktioniert bei mir unter Mac OS X.

34voto

Dennis Williamson Punkte 322329

Diese Version ist vergleichbar mit Chiborgs Antwort aber es entfällt die Notwendigkeit für die externe tty y cat . Es verwendet date verwenden, aber genauso gut könnte man gawk . Sie können das Ganze ändern und die doppelten eckigen Klammern durch einfache ersetzen, dann läuft es auch in sh .

#!/bin/bash
LANG=C
if [[ -z "$1" ]]
then
    if [[ -p /dev/stdin ]]    # input from a pipe
    then
        read -r p
    else
        echo "No timestamp given." >&2
        exit
    fi
else
    p=$1
fi
date -d "@$p" +%c

22voto

ghostdog74 Punkte 305138

Sie können zum Beispiel GNU date verwenden,

$ sec=1267619929
$ date -d "UTC 1970-01-01 $sec secs"

oder

$ date -ud @1267619929

20voto

andranikasl Punkte 977

Sie können das formatierte Datum aus dem Zeitstempel wie folgt abrufen

date +'%Y-%m-%d %H:%M:%S' -d "@timestamp"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X