You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将毫秒级时间戳转换为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:42:45