Wie konvertiere ich ein Datum in Millisekunden seit der Unix-Epoche in Bash?

7

Ich habe ein Datum im Format:

22-Sep-2014 10:32:35

Ich brauche einen 13-stelligen Zeitstempel, aber wenn ich auf diese Weise konvertiere

time=$(date -d "$DATE" '+%s')

Ich bekomme eine 10-stellige Nummer

Wenn ich es versuche

tt=$(date -d "$DATE");
time=$($tt +'%s * 1000 + %-N / 1000000')

Ich bekomme

line 22: Mon: command not found
Alexiel
quelle
3
Die verknüpfte Frage bezieht sich auf die aktuelle Zeit zum Zeitpunkt der Ausführung des Befehls und konvertiert keine vorhandene Zeit.
Patrick

Antworten:

5

Ihr zweiter Versuch war knapp. Sie müssen lediglich den dateBefehl anweisen, am Ende Millisekunden hinzuzufügen. Sie können dies mit dem %NFormatierer tun . %NErweitert sich auf Nanosekunden, und dann können Sie dies einfach mit kürzen %3N.
Beachten Sie jedoch, dass Ihre Beispieleingabezeit keine Millisekunden enthält, sodass Sie sie einfach .000am Ende hinzufügen können .
Angenommen, dies ist nicht das, was Sie wollen, dann ist hier ein Beispiel, das Millisekundengenauigkeit bietet:

$ DATE="22-Sep-2014 10:32:35.012"
$ date -d "$DATE" +'%s.%3N'
1411396355.012
Patrick
quelle
0

Ich habe es und das ist:

$date -u +'%Y-%m-%d %H:%M:%S.%3N'

und der folgende ist der kürzeste des obigen Codes:

$date -u +"%F %T.%3N

und die Ausgabe für beide ist wie folgt:

2017-05-12 23:10:54.268

Das -uist nur für die UTC-Zeitzone. Sie können es entfernen.

Venky
quelle
Übrigens habe ich es unter Linux verwendet, um das Datum für das MySQL-Datumsformat zu erhalten
Venky