Wie man Zeit in Millisekunden in C++ erhält
-
Verwenden Sie die Methode
std::chrono::system_clock::now()
, um die Zeit in Millisekunden in C++ zu erhalten -
Verwenden Sie die Funktion
gettimeofday()
, um die Zeit in Millisekunden in C++ zu erhalten -
Verwenden Sie die
time()
Funktion, um Zeit in Millisekunden in C++ zu erhalten
In diesem Artikel werden mehrere C++-Methoden vorgestellt, wie man Zeit in Millisekunden erhält.
Verwenden Sie die Methode std::chrono::system_clock::now()
, um die Zeit in Millisekunden in C++ zu erhalten
Die Klasse std::chrono::system_clock
ist die Schnittstelle in C++, um eine systemweite Echtzeit-Wanduhr zu erhalten. Die meisten Systeme verwenden die Unix-Zeit, die als Sekunden nach 00:00:00 UTC am 1. Januar 1970 (ein beliebiges Datum), genannt Unix-Epoche, dargestellt wird. Beachten Sie, dass Schaltsekunden ignoriert werden. Daher ist die Unix-Zeit nicht wirklich eine genaue Darstellung von UTC.
Zuerst wird die Methode now()
aufgerufen, um den aktuellen Zeitpunkt zurückzugeben. Die nächste aufgerufene Methode ist time_since_epoch
, um die Zeitspanne zwischen *this
und der Epoche der Uhr abzurufen, aber sie gibt ein Objekt der Klasse std::chrono::duration
zurück. Dieses Objekt sollte die count
-Methode aufrufen, um die tatsächliche Anzahl der Ticks zurückzugeben und sie als Millisekunden darzustellen. Das Ergebnis wird mit duration_cast<milliseconds>
gecasted.
#include <sys/time.h>
#include <chrono>
#include <ctime>
#include <iostream>
using std::cout;
using std::endl;
using std::chrono::duration_cast;
using std::chrono::milliseconds;
using std::chrono::seconds;
using std::chrono::system_clock;
int main() {
auto millisec_since_epoch =
duration_cast<milliseconds>(system_clock::now().time_since_epoch())
.count();
auto sec_since_epoch =
duration_cast<seconds>(system_clock::now().time_since_epoch()).count();
cout << "seconds since epoch: " << sec_since_epoch << endl;
cout << "milliseconds since epoch: " << millisec_since_epoch << endl;
return EXIT_SUCCESS;
}
Ausgabe:
seconds since epoch: 1603612778
milliseconds since epoch: 1603612778389
Verwenden Sie die Funktion gettimeofday()
, um die Zeit in Millisekunden in C++ zu erhalten
gettimeofday
ist die POSIX-konforme Funktion zum Abrufen der Systemuhr. Sie nimmt eine Adresse des struct timeval
-Objekts als erstes Argument, um Zeitwerte zu speichern. Die Werte sind tv_sec
, die die Anzahl der Sekunden repräsentieren, und tv_usec
als Mikrosekunden, die seit der Unix-Epoche vergangen sind. gettimeofday
liefert int
den Wert 0 für Erfolg und -1 für das Scheitern der Fehlerbehandlung. Das zweite Argument der Funktion ist struct timezone
, aber da sie abgeschrieben wurde, sollten Sie einfach ein nullptr
übergeben. Beachten Sie, dass Sie einen <sys/time.h>
Header für die Funktionsdefinition einfügen müssten.
#include <sys/time.h>
#include <chrono>
#include <ctime>
#include <iostream>
using std::cout;
using std::endl;
int main() {
struct timeval time_now {};
gettimeofday(&time_now, nullptr);
time_t msecs_time = (time_now.tv_sec * 1000) + (time_now.tv_usec / 1000);
cout << "seconds since epoch: " << time_now.tv_sec << endl;
cout << "milliseconds since epoch: " << msecs_time << endl << endl;
return EXIT_SUCCESS;
}
Ausgabe:
seconds since epoch: 1603612778
milliseconds since epoch: 1603612778389
Verwenden Sie die time()
Funktion, um Zeit in Millisekunden in C++ zu erhalten
Eine weitere POSIX-konforme Methode zum Abrufen der Systemzeit in C++ ist der Aufruf der Funktion time
. time
nimmt ein optionales Argument vom Typ time_t*
, in dem der zurückgegebene Zeitwert gespeichert wird. Alternativ kann man den Rückgabewert der Funktion in der separat deklarierten Variablen speichern. Im letzteren Fall können Sie nullptr
als Argument übergeben. Beachten Sie, dass dieser Aufruf die Zeit nicht mit der gleichen Genauigkeit zurückgibt wie die vorherigen Aufrufe.
#include <sys/time.h>
#include <chrono>
#include <ctime>
#include <iostream>
using std::cout;
using std::endl;
int main() {
time_t now = time(nullptr);
time_t mnow = now * 1000;
cout << "seconds since epoch: " << now << endl;
cout << "milliseconds since epoch: " << mnow << endl << endl;
return EXIT_SUCCESS;
}
Ausgabe:
seconds since epoch: 1603612778
milliseconds since epoch: 1603612778000
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook