Wie erhalte ich die Zeit seit der Epoche in Millisekunden im OSX-Terminal?
Das Linux / Ubuntu-Äquivalent ist date +%s.%N
:
Linux $ date +%s.%N
1403377762.035521859
Was in meinem OSX-Terminal nicht funktioniert:
OSX $ date +%s.%N
1403377800.N
Wie erhalte ich die Zeit seit der Epoche in Millisekunden im OSX-Terminal?
Das Linux / Ubuntu-Äquivalent ist date +%s.%N
:
Linux $ date +%s.%N
1403377762.035521859
Was in meinem OSX-Terminal nicht funktioniert:
OSX $ date +%s.%N
1403377800.N
Antworten:
Das date
Programm in OS X unterscheidet sich von GNUs coreutils- date
Programm. Sie können coreutils (einschließlich gnu-date) installieren, dann haben Sie eine Version date
, die Millisekunden unterstützt.
Da die Installation aus dem Quellcode für native OS X-Benutzer problematisch sein kann, rate ich Ihnen, Homebrew zu verwenden .
Um diese Tools mit Homebrew zu installieren, führen Sie diesen Oneliner in Ihrem Terminal aus:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Homebrew ist jetzt installiert (es ist ratsam, den Vorschlägen des Installateurs nach der Installation zu folgen). Jetzt installieren wir coreutils mit brew
.
brew install coreutils
Wie in der Installation angegeben, wurden alle Befehle mit dem Präfix 'g' installiert (z. B. gdate, gcat, gln usw. usw.). Wenn Sie diese Befehle wirklich mit ihren normalen Namen verwenden müssen, können Sie Ihrem PATH ( ~/.bash_profile
) ein "gnubin" -Verzeichnis hinzufügen :
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
Du kannst jetzt rennen
gdate +%s.%N
und dies gibt Ihre Zeit seit der Epoche in Millisekunden aus.
date
GNU date
(anstelle von gdate)
+%s.%N
Format die Sekunden auf Nanosekunden genau an, nicht auf Millisekunden. Nachdem ich die Installation mit brew durchgeführt hatte gdate
, überprüfte ich auf der Manpage, ob Millisekunden verfügbar waren. Es ist nicht. Es wurde auch nicht gesagt, dass eine Genauigkeit für %N
angegeben werden könnte, aber ich habe es trotzdem versucht. Ich stellte fest, dass der Befehl, die Sekunden auf Millisekunden genau zu bringen (dh drei Dezimalstellen), lautet gdate +%s.%3N
.
In OS X wird nur ausgeführt, date +%s
weil OS X keine höhere Genauigkeit als die in date
der Ausgabe unterstützte unterstützt. Übermäßige Genauigkeit, die von der internen Darstellung nicht unterstützt wird, wird in Richtung minus unendlich abgeschnitten.
Wenn Sie eine Millisekunden-Ausgabe wünschen, können Sie den folgenden Befehl verwenden, obwohl die Ausgabe nur durch das Anhängen von Nullen korrigiert wird, anstatt aus dem oben genannten Grund die Genauigkeit zu erhöhen. Das Folgende gibt korrekte Millisekunden auf Systemen aus, die die erforderliche Präzision unterstützen.
echo $(($(date +'%s * 1000 + %-N / 1000000')))
Quelle für obigen Befehl: Unix.SE - Wie man Millisekunden seit der Unix-Epoche abruft
Wenn Sie nur einen Befehl benötigen, der die richtige Anzahl von Nullen in OS X anfügt, können Sie Folgendes verwenden:
date +%s000
%-N
dies nicht und kann daher Probleme verursachen, wenn die Shell-Variable gesetzt $N
ist. Verwenden Sie einfach date +%s000
(oder date +%s.000
wenn Sie den Dezimalpunkt möchten).
date
Befehl jedoch nur %-N
as durchläuft N
, kann die Berechnung beeinträchtigt werden. Versuchen Sie es mit der Einstellung N=7000000000000000000
und dann mit dem Befehl ... In der Praxis ist dies ein unwahrscheinlicher Fall, aber ich würde mich mit etwas sicherer fühlen, das nicht von der Umgebung abhängt.
Diese Lösung funktioniert unter MacOS.
Wenn Sie ein Bash-Skript verwenden und Python zur Verfügung haben, können Sie diesen Code verwenden:
#!/bin/bash
python -c 'from time import time; print int(round(time() * 1000))'
Oder schreiben Sie ein python
Skript direkt:
#!/usr/bin/python
from time import time
print int(round(time() * 1000))
gdate
wurde in installiert/usr/local/bin/gdate
.