Drucken der Systemzeit in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden von std::chrono::system_clock und std::ctime zum Drucken der Systemzeit in C++
  2. Verwendung von time, localtime und strftime zur Ausgabe der Systemzeit in C++
Drucken der Systemzeit in C++

In diesem Artikel werden verschiedene Methoden zum Drucken der Systemzeit in C++ erläutert.

Verwenden von std::chrono::system_clock und std::ctime zum Drucken der Systemzeit in C++

std::chrono::system_clock stellt die systemweite Wanduhr dar und bietet zwei Funktionen zum Konvertieren in / vom Typ std::time_t. Das letztere Objekt können wir mit der Funktion ctime verarbeiten und eine nullterminierte Zeichenkette des Formulars zurückgeben - Wed Jun 30 21:49:08 1993\n. In diesem Fall erstellen wir eine separate Funktion, um beide Aufrufe zu kapseln und den Wert string an den Aufrufer zurückzugeben. Beachten Sie, dass wir auch das neue Zeilenzeichen entfernen, um den Wert in einer flexibleren Form zurückzugeben. Außerdem wird system_clock::now verwendet, um den aktuellen Zeitpunkt abzurufen.

#include <sys/time.h>

#include <chrono>
#include <ctime>
#include <iostream>

using std::cout;
using std::endl;
using std::string;

std::string timeToString(std::chrono::system_clock::time_point &t) {
  std::time_t time = std::chrono::system_clock::to_time_t(t);
  std::string time_str = std::ctime(&time);
  time_str.resize(time_str.size() - 1);
  return time_str;
}

int main() {
  auto time_p = std::chrono::system_clock::now();
  cout << "Current time: " << timeToString(time_p) << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

Current time: Fri Apr  1 01:34:20 2021

Sie können dieselbe Methode auch verwenden, um den Epochenwert in einer ähnlichen Form anzuzeigen, wie im folgenden Beispiel gezeigt. Beachten Sie, dass Epoche normalerweise der 1. Januar 1970 für POSIX/UNIX-Systeme ist, es jedoch nicht erforderlich ist, dass für verschiedene Uhren, die in der Bibliothek chrono bereitgestellt werden, derselbe Wert angegeben wird.

#include <sys/time.h>

#include <chrono>
#include <ctime>
#include <iostream>

using std::cout;
using std::endl;
using std::string;

std::string timeToString(std::chrono::system_clock::time_point &t) {
  std::time_t time = std::chrono::system_clock::to_time_t(t);
  std::string time_str = std::ctime(&time);
  time_str.resize(time_str.size() - 1);
  return time_str;
}

int main() {
  std::chrono::system_clock::time_point time_p2;
  cout << "Epoch: " << timeToString(time_p2) << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

Epoch: Thu Jan  1 00:00:00 1970

Verwendung von time, localtime und strftime zur Ausgabe der Systemzeit in C++

Alternativ können wir die POSIX-spezifische Funktion time verwenden und die Struktur time_t direkt abrufen. time_t ist im Wesentlichen eine Ganzzahl, die die Anzahl der Sekunden seit der Epoche speichert. Ähnlich wie bei der vorherigen Methode können wir ctime verwenden, um in die Zeichenkette vordefinierter Form zu konvertieren, oder die Funktion localtime aufrufen. Die Funktion localtime konvertiert das Objekt time_t in die Struktur tm. Hierbei handelt es sich um das aufgeschlüsselte Zeitformat, mit dem die AusgabeZeichenkette mit speziellen Spezifizierern nach Belieben formatiert werden kann. Die Formatierung erfolgt über die Funktion strftime, die vier Parameter akzeptiert, von denen der letzte der Zeiger auf struct tm ist. Das erste Argument gibt die Speicheradresse an, unter der die Zeichenkette gespeichert wird, und die nächsten beiden Argumente geben die maximale Größe der Zeichenkette und den Formatbezeichner an. Die detaillierte Übersicht über die Formatspezifikation finden Sie auf dieser Seite.

#include <sys/time.h>

#include <ctime>
#include <iostream>

using std::cout;
using std::endl;
using std::string;

int main() {
  char tt[100];
  time_t now = time(nullptr);
  auto tm_info = localtime(&now);

  strftime(tt, 100, "%Y-%m-%d %H:%M:%S", tm_info);
  puts(tt);

  return EXIT_SUCCESS;
}

Ausgabe:

2021-04-02 05:42:46
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