Drucken der Systemzeit in C++
-
Verwenden von
std::chrono::system_clock
undstd::ctime
zum Drucken der Systemzeit in C++ -
Verwendung von
time
,localtime
undstrftime
zur Ausgabe 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
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