0

0

C++ 怎么获取系统时间戳 C++ time与chrono转换【计时】

裘德小鎮的故事

裘德小鎮的故事

发布时间:2026-01-27 08:12:50

|

724人浏览过

|

来源于php中文网

原创

最直接方法是用std::chrono::system_clock::to_time_t(std::chrono::system_clock::now())获取秒级Unix时间戳;需毫秒级则用duration_cast(now.time_since_epoch()).count()。

c++ 怎么获取系统时间戳 c++ time与chrono转换【计时】

std::chrono::system_clock 获取 Unix 时间戳最直接

Unix 时间戳本质是自 1970-01-01 00:00:00 UTC 起的秒数(或毫秒等),C++11 起推荐用 std::chrono::system_clock,它保证映射到系统实时时钟,且可转为 time_t

常见错误是直接用 std::time(nullptr) 得到秒级时间,但丢失毫秒精度;或误以为 std::chrono::steady_clock 能返回绝对时间(它不能,只适合测间隔)。

  • std::chrono::system_clock::now().time_since_epoch().count() 返回的是纳秒/微秒/毫秒等单位的整数,具体取决于实现(通常是纳秒),需除以对应倍数才能得到秒或毫秒时间戳
  • 更稳妥的做法是转成 time_t:用 std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()),得到秒级时间戳(time_t 类型,通常为 longint64_t
  • 若需毫秒级时间戳(如日志、网络协议常用),推荐:
    auto now = std::chrono::system_clock::now();
    auto ms = std::chrono::duration_cast(now.time_since_epoch()).count();

std::time_tstd::chrono::time_point 互转要注意时区与精度

std::time_t 是 C 风格的秒级时间表示,不带时区信息,但 std::localtime / std::gmtime 解析时会按本地或 UTC 解释;而 std::chrono::system_clock::time_point 是纯数值偏移,底层依赖 time_t,但转换过程不自动处理时区。

  • time_tstd::chrono::time_point:用 std::chrono::system_clock::from_time_t(t) —— 这个结果代表同一时刻的 UTC 时间点(system_clock 始终以 UTC 为基准)
  • 反向转换(time_pointtime_t)用 to_time_t(),结果仍是秒级 UTC 时间戳,和 std::time(nullptr) 一致
  • 不要用 std::chrono::system_clock::to_time_t(tp) 后再传给 std::localtime() 试图“还原本地时间”——这不是转换问题,而是显示逻辑,应单独调用 std::localtime(&t)

计时用 std::chrono::steady_clock,别混用 system_clock

做性能测量、超时控制、循环等待时,必须用 std::chrono::steady_clock,因为它不受系统时间调整(如 NTP 校正、手动改系统时间)影响;而 system_clock 可能回跳或跳变,导致 duration 计算出负值或异常大值。

立即学习C++免费学习笔记(深入)”;

ArrowMancer
ArrowMancer

手机上的宇宙动作RPG,游戏角色和元素均为AI生成

下载
  • 正确计时模式:
    auto start = std::chrono::steady_clock::now();
    // ... work ...
    auto end = std::chrono::steady_clock::now();
    auto us = std::chrono::duration_cast(end - start).count();
  • steady_clock 无法转 time_t 或表示日历时间,它的 now() 返回值仅用于差值计算
  • 某些平台(如 Windows)上 steady_clockhigh_resolution_clock 可能是同一类型,但标准不保证,别依赖 high_resolution_clock —— 它可能退化为 system_clock

Windows 下 GetSystemTimeAsFileTime 不推荐用于跨平台时间戳

虽然 Windows API 提供高精度的 GetSystemTimeAsFileTime(返回 100 纳秒精度的 FILETIME),但它基于 Windows 纪元(1601-01-01),换算麻烦,且与 POSIX 时间模型不兼容。强行用会导致:

  • 跨平台代码出现条件编译分支,增加维护成本
  • 精度虽高,但若只需毫秒/微秒级,std::chrono::system_clock 在主流平台(Linux/macOS/Windows)均已足够精确(通常微秒级)
  • FILETIME 到 Unix 时间戳需减去 116444736000000000LL(1601→1970 的 100ns 单位差),易出错

除非你正在写内核驱动或必须对接旧 Win32 接口,否则坚持用 std::chrono 是更简单、更安全的选择。

真正容易被忽略的是:不同 time_point 类型之间不能直接相减(比如 steady_clock::time_pointsystem_clock::time_point),编译器会报错;而 time_tchrono 之间的转换看似简单,但一旦涉及本地时区显示,就必须在转换后额外调用 localtimegmtime,而不是指望 clock 类型自己“带时区”。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2023.11.20

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1075

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

169

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1291

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

16

2026.01.19

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

732

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1128

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

799

2023.08.01

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

2

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.9万人学习

Git 教程
Git 教程

共21课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号