0

0

c++中如何获取系统当前时间_c++获取当前时间戳的方法【实例】

穿越時空

穿越時空

发布时间:2026-01-26 08:43:02

|

573人浏览过

|

来源于php中文网

原创

最可靠的方式是用 std::chrono::system_clock::now() 配合 duration_cast 转秒级时间戳,类型安全、跨平台、无符号、默认 Unix 时间戳;避免 time() 和 gettimeofday() 等 C 接口,因其存在精度低、线程不安全、32 位溢出等隐患。

c++中如何获取系统当前时间_c++获取当前时间戳的方法【实例】

直接用 std::chrono::system_clock::now() 转成秒级时间戳最可靠,别碰 time()gettimeofday() 这类 C 风格接口——它们在跨平台、精度、线程安全上都有隐性坑。

std::chrono 获取秒级时间戳(推荐)

这是 C++11 之后的标准做法,类型安全、无符号、跨平台,且默认就是 Unix 时间戳(自 1970-01-01 00:00:00 UTC 起的秒数)。

  • std::chrono::system_clock::now() 返回的是一个高精度时间点(可能含纳秒),需显式截断或转换
  • 转秒级:用 time_t 中间类型,或直接用 duration_cast()
  • 注意:system_clock 不保证是单调时钟,可能受系统时间调整影响(如 NTP 校正)
auto now = std::chrono::system_clock::now();
auto seconds = std::chrono::duration_cast(now.time_since_epoch()).count();
// seconds 是 long long 类型,即标准 Unix 时间戳(秒)

获取毫秒/微秒级时间戳(需要更高精度)

很多日志、性能打点、网络协议需要毫秒或微秒粒度。仍用 std::chrono,只换 duration_cast 的目标类型即可。

  • 毫秒时间戳:用 std::chrono::milliseconds,结果是自 epoch 起的毫秒数(long long
  • 微秒同理,但要注意:某些平台(如 Windows)system_clock 实际分辨率只有 ~15ms,别误以为能稳定拿到微秒
  • 不要用 clock_gettime(CLOCK_REALTIME, ...) 手动拼——它不是标准 C++,且返回结构体需自己算
auto now = std::chrono::system_clock::now();
auto ms = std::chrono::duration_cast(now.time_since_epoch()).count();
// ms 是自 1970-01-01 起的毫秒数,可直接用于日志前缀或 HTTP Date 头构造

为什么不该用 time(nullptr)

它看似简单,但隐藏三个实际问题:

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

微信 WeLM
微信 WeLM

WeLM不是一个直接的对话机器人,而是一个补全用户输入信息的生成模型。

下载
  • 返回 time_t,类型不明确(C++11 前可能是 int,32 位系统 2038 年就溢出)
  • 无法直接获得毫秒——你得再调 gettimeofday()clock_gettime(),引入平台差异
  • time() 是基于 system_clock 的封装,但丢掉了精度和类型信息,属于“退化使用”

除非你在写兼容 C99 的极简嵌入式代码,否则没理由绕开 std::chrono

Windows 下特别注意 GetSystemTimeAsFileTime 的陷阱

有人查 MSDN 后直接用这个 API,结果发现值比 Unix 时间戳大 11644473600 秒——因为它返回的是自 1601-01-01 起的 100 纳秒单位数。

  • 换算公式固定:unix_ts = (filetime - 116444736000000000LL) / 10000000
  • 但手动计算易出错,且完全失去可读性和可移植性
  • std::chrono::system_clock::now() 在 MSVC 和 MinGW 下都已正确映射到系统真实时间,无需干预

真正容易被忽略的,是 system_clock::time_pointtime_t 的转换在某些老编译器(如早期 GCC 4.8)里有符号扩展 bug;只要用 duration_cast 直接取 count(),就能绕过所有中间类型风险。

热门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

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

220

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

192

2025.07.04

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

421

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

543

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

73

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

197

2025.08.29

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

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

1074

2023.10.19

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

31

2026.01.26

热门下载

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

精品课程

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

共48课时 | 7.8万人学习

Excel 教程
Excel 教程

共162课时 | 13.6万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 2万人学习

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

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