Wie bekomme 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
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 ein Problem sein kann, empfehle 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, nach der Installation den Vorschlägen des Installers zu folgen). Jetzt installieren wir coreutils mit brew
.
brew install coreutils
Wie die Installation sagt, wurden alle Befehle mit dem Präfix 'g' installiert (zB gdate, gcat, gln, etc etc). Wenn Sie diese Befehle wirklich mit ihren normalen Namen verwenden müssen, können Sie Ihrem PATH ( ~/.bash_profile
) ein "gnubin"-Verzeichnis hinzufügen, wie zum Beispiel:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
Sie können jetzt laufen
gdate +%s.%N
und dies wird Ihre Zeit seit der Epoche in Millisekunden ausgeben.
Führen Sie in OS X einfach aus, date +%s
da OS X keine höhere Genauigkeit als diese in date
der Ausgabe von unterstützt und jede überschüssige Genauigkeit, die nicht von der internen Darstellung unterstützt wird, gegen minus unendlich gekürzt wird.
Wenn Sie eine Millisekundenausgabe wünschen, können Sie den folgenden Befehl verwenden, obwohl die Ausgabe aus dem oben genannten Grund nur durch Anhängen von Nullen korrigiert wird, anstatt Genauigkeit hinzuzufügen. Das Folgende gibt korrekte Millisekunden auf Systemen aus, die die erforderliche Genauigkeit unterstützen.
echo $(($(date +'%s * 1000 + %-N / 1000000')))
Quelle für den obigen Befehl: Unix.SE – So erhalten Sie Millisekunden seit der Unix-Epoche
Wenn Sie nur einen Befehl wünschen, der in OS X die richtige Anzahl von Nullen anhängt, können Sie Folgendes verwenden:
date +%s000
%-N
, also macht das nichts (und könnte Probleme verursachen, wenn die Shell-Variable $N
gesetzt ist). Verwenden Sie einfach date +%s000
(oder date +%s.000
wenn Sie den Dezimalpunkt wollen).date
Befehl von OS X jedoch nur %-N
als übergeben N
wird, kann dies die Berechnung stören. Versuchen Sie die Einstellung N=7000000000000000000
, dann versuchen Sie den Befehl ... Dies ist in der Praxis ein unwahrscheinlicher Fall, aber ich würde mich mit etwas sicherer fühlen, das nicht von der Umgebung abhängt.date
funktioniert auf Ihrem Computer einwandfrei, ist jedoch gegen portables Skripting nutzlos. Für die Portabilität bietet dies den nächstmöglichen Wert.gdate
, steht es nicht mit dem vorhandenen date
Tool in Konflikt. Ein portables Skript, das Millisekundenzeiten benötigt, könnte auf das Vorhandensein von prüfen gdate
und es verwenden. Es würde date
ggf. auf das +%s.000
Format zurückgreifen. Ein sehr portables Skript würde die Ausgabe von testen date
und überprüfen, ob es die notwendigen Informationen enthält, die es ermöglichen würden, es auf verschiedenen Betriebssystemen auszuführen.Perl ist allgegenwärtig.
$ perl -MTime::HiRes=time -e 'printf "%.9f\n", time'
1557390839.244920969
Diese Lösung funktioniert unter macOS.
Wenn Sie erwägen, ein Bash-Skript zu 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 python
Sie direkt ein Skript:
#!/usr/bin/python
from time import time
print int(round(time() * 1000))
print()
Funktion anstelle der print
Anweisung verwenden, funktioniert es mit beiden Versionen: python -c 'from time import time; print(int(round(time() * 1000)))'
Dadurch können Sie den gemeinsamen python
Befehl verwenden, ohne sich Gedanken darüber machen zu müssen, ob er in einen Pfad für Python Version 2 oder Version 3 aufgelöst wird.
Adam Matan
gdate
wurde in installiert/usr/local/bin/gdate
.CousinKokain
date
zu GNUdate
(statt gdate)CousinKokain
Herr Lance E. Sloan
+%s.%N
Format die Sekunden bis auf Nanosekunden genau an, nicht Millisekunden. Nachdem ich brew zum Installieren verwendetgdate
hatte, überprüfte ich die Manpage, um zu sehen, 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 habe festgestellt, dass der Befehl, um die Sekunden nur auf Millisekunden genau (dh drei Dezimalstellen) herunterzubekommen,gdate +%s.%3N
.