如何在 C++ 中将 UTC 日期/时间戳解析为 std::chrono::time_point
以下函数解析类似这样的字符串
input.txt
2023-07-04 09:57:01为 UTC 时间戳。
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);
}测试代码
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
由于 ParseDatetimeFromTimeString() 将时间戳解析为 UTC,我们可以使用 std::put_time(std::gmtime(...)) 打印回原始时间戳:
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