Wie erhalte ich die aktuelle Unix-Zeit in Millisekunden (dh die Anzahl der Millisekunden seit der Unix-Epoche vom 1. Januar 1970)?
232
date +%s
Gibt die Anzahl der Sekunden seit der Epoche zurück.
date +%s%N
Gibt die Sekunden und die aktuellen Nanosekunden zurück.
date +%s%N | cut -b1-13
gibt die Anzahl der Millisekunden seit der letzten Sekunde plus die drei linken Nanosekunden an.
und von MikeyB - echo $(($(date +%s%N)/1000000))
(Division durch 1000 bringt nur Mikrosekunden)
echo $(($(date +%s%N)/1000))
Sie können einfach verwenden,
%3N
um die Nanosekunden auf die drei höchstwertigen Stellen (die dann Millisekunden sind) zu kürzen:Das funktioniert zB auf meinem Kubuntu 12.04.
Beachten Sie jedoch, dass
%N
dies je nach Zielsystem möglicherweise nicht implementiert ist. ZB getestet auf einem eingebetteten System (buildroot rootfs, kompiliert mit einer nicht-HF Arm Cross Toolchain) gab es keine%N
:(Und auch mein (nicht verwurzeltes) Android-Tablet hat keine
%N
).quelle
1397392146%3N
zu1397392146%N
, aber der Ausgang1397392146%3N
ist das , was ich würde auf der Busybox - Konsole meines Android - Tablet wirklich gesehen. Könntest du deine Bearbeitung erklären?date +%s.%3N
druckt1510718281.134
.date +%N
funktioniert nicht unter OS X, aber Sie könnten eines von verwendenruby -e 'puts Time.now.to_f'
python -c 'import time; print time.time()'
node -e 'console.log(Date.now())'
php -r 'echo microtime(TRUE);'
DateTime.utc_now() |> DateTime.to_unix(:millisecond)
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
date +%s000
quelle
node -e 'console.log(Date.now())'
php -r 'echo microtime(TRUE);'
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
date +%s000
coreutils
Wirf das einfach raus, aber ich denke, die richtige Formel mit der Aufteilung wäre:
quelle
Meine Lösung ist nicht die beste, hat aber für mich funktioniert.
date +%s000
Ich musste nur ein Datum wie den 05.05.2012 in Millisekunden umrechnen.
quelle
Für die Leute, die vorschlagen, externe Programme auszuführen , um die Millisekunden zu erhalten ... in diesem Tempo können Sie auch Folgendes tun:
Beachten Sie, dass nicht alle Programme unter einer Sekunde ausgeführt werden, bevor Sie hier eine Antwort eingeben. Messen!
quelle
date
dauert die Ausführung 3 ms.Diese Lösung funktioniert unter MacOS.
Wenn Sie ein Bash-Skript verwenden und Python zur Verfügung haben, können Sie diesen Code verwenden:
quelle
Wenn Sie nach einer Möglichkeit suchen, die Ausführungsdauer Ihres Skripts anzuzeigen, erhalten Sie mit den folgenden Angaben ein (nicht ganz genaues) Ergebnis:
Geben Sie so nah wie möglich am Anfang Ihres Skripts Folgendes ein
basetime=$(date +%s%N)
Dies gibt Ihnen einen Startwert von 1361802943996000000
Verwenden Sie am Ende Ihres Skripts Folgendes
echo "runtime: $(echo "scale=3;($(date +%s%N) - ${basetime})/(1*10^09)" | bc) seconds"
das wird so etwas wie anzeigen
runtime: 12.383 seconds
Anmerkungen:
(1 * 10 ^ 09) kann auf Wunsch durch 1000000000 ersetzt werden
"scale=3"
ist eine eher seltene Einstellung, die dazu zwingt, dasbc
zu tun, was Sie wollen. Es gibt noch viel mehr!Ich habe dies nur unter Win7 / MinGW getestet ... Ich habe keine richtige * nix-Box zur Hand.
quelle
time <script>
So erhalten Sie Zeit in Millisekunden, ohne eine Division durchzuführen. Vielleicht ist es schneller ...
Update: Eine weitere Alternative in Pure Bash, die nur funktioniert,
bash 4.2+
ist die gleiche wie oben, wird jedoch verwendetprintf
, um das Datum abzurufen. Es wird auf jeden Fall schneller sein, da keine Prozesse von dem Hauptprozess abgezweigt werden.Ein weiterer Haken dabei ist, dass Ihre
strftime
Implementierung dies unterstützen sollte%s
und%N
was auf meinem Testcomputer NICHT der Fall ist. Sieheman strftime
unterstützte Optionen. Siehe auchman bash
sehenprintf
Syntax.-1
und-2
sind spezielle Werte für die Zeit.quelle
strftime(3)
keine Unterstützung%N
fürprintf
das Drucken von Nanosekunden bietet . Ich benutze Ubuntu 14.04.date
scheint wie die zuverlässigere Option.Der genaueste Zeitstempel, den wir bekommen können (zumindest für Mac OS X), ist wahrscheinlich der folgende:
Wir müssen jedoch berücksichtigen, dass die Ausführung etwa 30 Millisekunden dauert. Wir können es auf die Skala eines 2-stelligen Bruchteils zuschneiden und ganz zu Beginn den durchschnittlichen Aufwand für das Ablesen der Zeit berechnen und es dann von der Messung entfernen. Hier ist ein Beispiel:
Sie können die Echobefehle auskommentieren, um besser zu sehen, wie es funktioniert.
Die Ergebnisse für dieses Skript sind normalerweise eines der folgenden 3 Ergebnisse:
quelle
Mit date und expr können Sie dorthin gelangen, z
Erweitern Sie es einfach, um zu tun, was Sie wollen
Mir ist klar, dass dies seit der Epoche keine Millisekunden mehr sind, aber in einigen Fällen kann es dennoch nützlich sein, es hängt davon ab, wofür Sie es wirklich benötigen. Multiplizieren Sie es mit 1000, wenn Sie eine Millisekunden-Zahl benötigen: D
Am einfachsten wäre es, eine kleine ausführbare Datei (aus C f.ex.) zu erstellen und sie dem Skript zur Verfügung zu stellen.
quelle
date
mehrmals auf. In einigen Fällen können sich Datum und Uhrzeit zwischen den Ausführungen ändern, während Ihr Befehl geschrieben wird. Es ist besser,date
einmal zu starten, die Teile zu analysieren und Ihre Berechnung durchzuführen. Eine von mehreren Möglichkeiten, dies zu tun, wäret=$(date +%H%M%S); (( x = ${t:0:2} * 3600 + ${t:2:2} * 60 + ${t:4:2} )); echo "$x"
. Hierbei wird die Bash-Syntax verwendet, da die Frage mit bash gekennzeichnet ist . Wie Sie anspielen, gibt Ihre Antwort (und meine Variante) bisher nur Sekunden für den aktuellen Tag und nicht seit der Epoche und nicht in Millis.(von oben wiederholen)
date +%N
funktioniert nicht unter OS X, aber Sie könnten auch Folgendes verwenden:Perl (erfordert das Time :: Format-Modul). Möglicherweise nicht das beste zu verwendende CPAN-Modul, erledigt aber die Aufgabe. Time :: Format wird in der Regel mit Distributionen zur Verfügung gestellt.
quelle
date
kann nicht verwendet werden , und es gibt keine bash-nur Befehle , die die Notwendigkeit beantworten.date
nicht als Teil Ihrer Antwort verwendet werden kann , würde ich meine Ablehnung entfernen.Alle vorherigen Antworten in OSX zusammenfassen
Sie können gerne tun
quelle
Wenn Sie eine einfache Berechnung der abgelaufenen Shell wünschen, ist dies einfach und portierbar. Verwenden Sie dazu die obige Antwort:
quelle
Für alpines Linux (viele Docker-Images) und möglicherweise andere minimale Linux-Umgebungen können Sie Folgendes missbrauchen
adjtimex
:adjtimex
wird zum Lesen (und Setzen) von Kernel-Zeitvariablen verwendet. Mitawk
können Sie die Mikrosekunden erhalten, mit könnenhead
Sie nur die ersten 3 Stellen verwenden.Ich habe keine Ahnung, wie zuverlässig dieser Befehl ist.
Hinweis: Schamlos aus dieser Antwort gestohlen
quelle