Wie man Zeit in Millisekunden in C++ erhält

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Methode std::chrono::system_clock::now(), um die Zeit in Millisekunden in C++ zu erhalten
  2. Verwenden Sie die Funktion gettimeofday(), um die Zeit in Millisekunden in C++ zu erhalten
  3. Verwenden Sie die time() Funktion, um Zeit in Millisekunden in C++ zu erhalten
Wie man Zeit in Millisekunden in C++ erhält

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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Verwandter Artikel - C++ Time