Wie erhalte ich die aktuelle Zeit unter Linux in Millisekunden?
85
Dies kann mit der POSIX-clock_gettime
Funktion erreicht werden.
In der aktuellen Version von POSIX gettimeofday
ist dies als veraltet markiert . Dies bedeutet, dass es möglicherweise aus einer zukünftigen Version der Spezifikation entfernt wird. Anwendungsschreiber werden aufgefordert, die clock_gettime
Funktion anstelle von zu verwenden gettimeofday
.
Hier ist ein Beispiel für die Verwendung clock_gettime
:
#define _POSIX_C_SOURCE 200809L
#include <inttypes.h>
#include <math.h>
#include <stdio.h>
#include <time.h>
void print_current_time_with_ms (void)
{
long ms; // Milliseconds
time_t s; // Seconds
struct timespec spec;
clock_gettime(CLOCK_REALTIME, &spec);
s = spec.tv_sec;
ms = round(spec.tv_nsec / 1.0e6); // Convert nanoseconds to milliseconds
if (ms > 999) {
s++;
ms = 0;
}
printf("Current time: %"PRIdMAX".%03ld seconds since the Epoch\n",
(intmax_t)s, ms);
}
Wenn Sie die verstrichene Zeit messen möchten und Ihr System die Option "monotone Uhr" unterstützt, sollten Sie die Verwendung von CLOCK_MONOTONIC
anstelle von in Betracht ziehen CLOCK_REALTIME
.
gcc
Befehl.s
in diesem Fall inkrementieren . Wahrscheinlich ein seltenes Ereignis, aber die zusätzliche Ziffer kann Probleme verursachen.Sie müssen so etwas tun:
quelle
Im Folgenden finden Sie die Util-Funktion zum Abrufen des aktuellen Zeitstempels in Millisekunden:
Über die Zeitzone :
@ Update - Zeitzone
Da die
long
Darstellung der Zeit für die Zeitzone selbst nicht relevant ist oder vontz
dieser beeinflusst wird, ist es nicht erforderlich, den Parameter gettimeofday () festzulegen, da dies keinen Unterschied macht.Und nach Mann Seite
gettimeofday()
, die Verwendung dertimezone
ist Struktur obsolet, so dietz
Argumentation sollte normalerweise als NULL angegeben werden, für Details überprüfen Sie bitte die Manpage.quelle
tz
Parameter vongettimeofday()
as&(struct timezone tz = {480, 0})
nicht gewarnt wurde, und es hat keine Auswirkung auf das Ergebnis, was sinnvoll ist, da dielong
Darstellung der Zeit für oder beeinflusst nicht relevant ist nach Zeitzone selbst, richtig?NULL
der angemessene Wert zu übergeben. Und ich glaube, Testen ist immer ein guter Ansatz, um Dinge zu beweisen.Verwenden Sie
gettimeofday()
diese Option , um die Zeit in Sekunden und Mikrosekunden abzurufen. Das Kombinieren und Runden auf Millisekunden bleibt als Übung übrig.quelle
C11
timespec_get
Es gibt bis zu Nanosekunden zurück, gerundet auf die Auflösung der Implementierung.
Es ist bereits in Ubuntu 15.10 implementiert. Die API sieht genauso aus wie die POSIX
clock_gettime
.Weitere Details finden Sie hier: https://stackoverflow.com/a/36095407/895245
quelle