如何在 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:01

Check out similar posts by category: C/C++