Wie man UTC-Datum/Zeitstempel in C++ in einen std::chrono::time_point parst
Die folgende Funktion parst eine Zeichenkette wie
input.txt
2023-07-04 09:57:01in einen UTC-Zeitstempel.
parse_utc.cpp
#include <chrono>
#include <sstream>
#include <ctime>
std::chrono::time_point<std::chrono::system_clock> ParseDatetimeFromTimeString(const std::string& timeString) {
std::tm t = {};
std::istringstream ss(timeString);
ss >> std::get_time(&t, "%Y-%m-%d %H:%M:%S");
if (ss.fail()) {
throw std::runtime_error("Failed to parse filename time string");
}
// Convert timestamp to epoch time assuming UTC
std::time_t timet = timegm(&t);
// Convert timet to std::chrono::time_point<std::chrono::system_clock>
return std::chrono::system_clock::from_time_t(timet);
}Testcode
test.cpp
auto timepoint = ParseDatetimeFromTimeString("2023-07-04 09:57:01");
// print timepoint
std::time_t timet = std::chrono::system_clock::to_time_t(timepoint);
std::cout << std::put_time(std::gmtime(&timet), "%F %T") << std::endl; // Prints 2023-07-04 09:57:01
Da ParseDatetimeFromTimeString() den Zeitstempel als UTC parst, können wir std::put_time(std::gmtime(...)) verwenden, um den ursprünglichen Zeitstempel zurückzudrucken:
output.txt
2023-07-04 09:57:01Check out similar posts by category:
C/C++
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow