如何将毫秒级时间戳转换为C++ chrono time_point
毫秒级时间戳转C++ chrono time_point的解决方法
错误根源
编译器报错的核心是**epoch_count_ms的类型与std::chrono::milliseconds的底层数值类型不兼容**。std::chrono::milliseconds默认的底层类型通常是long,而你使用的时间戳1699491717000已经超出32位long的最大值(2147483647),直接用该值初始化就会触发类型不匹配错误。
修复方案
方案1:显式指定64位整数类型的duration
直接使用64位整数作为milliseconds的底层类型,避免数值溢出和类型不匹配:
// 假设epoch_count_ms为uint64_t/int64_t类型 std::chrono::system_clock::time_point tp{ std::chrono::duration<int64_t, std::milli>{epoch_count_ms} };
方案2:强制转换时间戳的数值类型
将epoch_count_ms强制转换为milliseconds兼容的64位整数类型:
std::chrono::milliseconds epoch_duration(static_cast<int64_t>(epoch_count_ms)); std::chrono::system_clock::time_point tp(epoch_duration);
方案3:定义匹配类型的时间戳变量
直接把epoch_count_ms声明为int64_t类型,从根源避免类型问题:
int64_t epoch_count_ms = 1699491717000; std::chrono::system_clock::time_point tp{std::chrono::milliseconds{epoch_count_ms}};
可运行验证示例
#include <chrono> #include <iostream> int main() { int64_t epoch_count_ms = 1699491717000; std::chrono::system_clock::time_point tp{std::chrono::milliseconds{epoch_count_ms}}; // 验证转换结果是否正确 auto ms_result = std::chrono::duration_cast<std::chrono::milliseconds>( tp.time_since_epoch() ).count(); std::cout << ms_result << std::endl; // 输出:1699491717000 return 0; }
内容的提问来源于stack exchange,提问作者shashashamti2008
相关产品推荐
相关产品推荐

