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 dateProgramm in OS X unterscheidet sich von GNUs coreutils- dateProgramm. 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.
dateGNU date(anstelle von gdate)
+%s.%NFormat 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 %Nangegeben 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 +%sweil OS X keine höhere Genauigkeit als die in dateder 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
%-Ndies nicht und kann daher Probleme verursachen, wenn die Shell-Variable gesetzt $Nist. Verwenden Sie einfach date +%s000(oder date +%s.000wenn Sie den Dezimalpunkt möchten).
dateBefehl jedoch nur %-Nas durchläuft N, kann die Berechnung beeinträchtigt werden. Versuchen Sie es mit der Einstellung N=7000000000000000000und 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 pythonSkript direkt:
#!/usr/bin/python
from time import time
print int(round(time() * 1000))
gdatewurde in installiert/usr/local/bin/gdate.