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

如何将std::chrono::high_resolution_clock::now()转换为毫秒、微秒及生成时间戳?

解决std::chrono::high_resolution_clock::now()生成时间戳的问题

嘿,我刚踩过一模一样的坑!直接打印high_resolution_clock::now()返回的time_point对象肯定会报错——因为C++标准库的ostream根本没默认支持输出这个类型,它不是int或者double这种基础数据类型,编译器完全不知道该怎么处理它的输出逻辑。

下面分两种常用场景给你解决方案:

一、生成通用Unix时间戳(从1970-01-01 UTC开始的毫秒/秒数)

这是最常用的时间戳场景,但要注意:high_resolution_clock的起始时间(epoch)不一定是Unix epoch(比如Windows上它的起始点是系统启动时间,而非UTC时间),所以得先把它转换为system_clock的时间点,再计算和Unix epoch的时间间隔。

直接上可运行的代码:

#include <chrono>
#include <iostream>

int main() {
    // 获取当前高分辨率时间点
    auto t0 = std::chrono::high_resolution_clock::now();
    
    // 把高分辨率时钟的时间点转换为系统时钟(对应UTC时间)的时间点
    // 这个转换逻辑是对齐两个时钟的当前时刻,避免时钟偏移
    auto system_time_point = std::chrono::time_point_cast<std::chrono::system_clock::duration>(
        t0 - std::chrono::high_resolution_clock::now() + std::chrono::system_clock::now()
    );
    
    // 生成毫秒级Unix时间戳
    long long ms_timestamp = std::chrono::duration_cast<std::chrono::milliseconds>(
        system_time_point.time_since_epoch()
    ).count();
    std::cout << "毫秒级Unix时间戳:" << ms_timestamp << "\n";
    
    // 生成浮点秒级Unix时间戳(支持精确到小数点后多位)
    double sec_timestamp = std::chrono::duration<double>(
        system_time_point.time_since_epoch()
    ).count();
    std::cout << "浮点秒级Unix时间戳:" << sec_timestamp << "\n";
    
    return 0;
}

二、调试用:打印高分辨率时钟的原始计时值

如果你只是想看看high_resolution_clock内部的计时数值(比如调试性能时看相对时间间隔),可以直接输出它自自身epoch以来的时长计数:

#include <chrono>
#include <iostream>

int main() {
    auto t0 = std::chrono::high_resolution_clock::now();
    // 输出自高分辨率时钟起始点以来的纳秒数(精度取决于你的平台)
    auto ns_count = std::chrono::duration_cast<std::chrono::nanoseconds>(t0.time_since_epoch()).count();
    std::cout << "高分辨率时钟自起始点以来的纳秒数:" << ns_count << "\n";
    return 0;
}

注意:这个值的起始点是平台相关的,不能用来和其他机器的时间做对比,仅适合本地的相对计时场景。

补充小提示

  • Linux平台上high_resolution_clock和system_clock是同一个实现,转换步骤可以简化,但为了跨平台兼容性,保留转换逻辑会更稳妥。
  • 如果只需要做相对计时(比如计算代码片段的运行耗时),直接用两个high_resolution_clock的time_point相减得到duration即可,不需要转换到system_clock。

内容的提问来源于stack exchange,提问作者Evandro Coan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:00:38