C++如何获取当前时间?(chrono库使用教程)
发布时间:2025-12-31 00:00:00 作者:冰火之心 浏览量()
摘要:最推荐的方式是调用 std::chrono::system_clock::now() 获取高精度跨平台时间点,再通过 to_time_t 转换为 time_t,结合线程安全的 localtime_s/localtime_r 转为 tm,最后用 std::put_time 格式化输...
最推荐的方式是调用 std::chrono::system_clock::now() 获取高精度跨平台时间点,再通过 to_time_t 转换为 time_t,结合线程安全的 localtime_s/localtime_r 转为 tm,最后用 std::put_time 格式化输出。
用 std::chrono 获取当前时间最推荐的方式是调用 std::chrono::system_clock::now(),它返回一个高精度、跨平台的时间点(time_point),再配合格式化转换就能得到可读的时间字符串。
获取系统当前时间点
std::chrono::system_clock::now() 是 C++11 引入的标准方式,代表自纪元(通常是 1970-01-01 00:00:00 UTC)以来的时间。它不依赖本地时区,但可转换为本地时间。
- 返回类型是
std::chrono::time_point<:chrono::system_clock> - 精度由实现决定(通常为纳秒或微秒),可用
time_since_epoch().count()提取底层计数值 - 不能直接输出,需转为
std::time_t或使用 C++20 的(或传统 C 风格转换)
转成可读的日期时间字符串(C++11/14/17)
借助 std::chrono::system_clock::to_time_t 和 C 标准库函数(如 localtime_s / localtime_r 或 gmtime)完成格式化:
- 先用
system_clock::to_time_t(now)转为time_t - 再用线程安全版本(如 Windows 用
localtime_s,Linux/macOS 用localtime_r)转为tm结构体 - 最后用
std::put_time或strftime格式化输出
示例(本地时间):
auto now = std::chrono::system_clock::now();
std::time_t t = std::chrono::system_clock::to_time_t(now);
std::tm tm{};
#ifdef _WIN32
localtime_s(&tm, &t);
#else
localtime_r(&t, &tm);
#endif
std::cout << std::put_time(&tm, "%Y-%m-%d %H:%M:%S") << '\n';
C++20 起更简洁的方式:使用 +
C++20 标准支持直接格式化 time_point,无
需经过 time_t 和 tm 中转:
- 包含头文件
和 - 用
std::format(std::chrono::system_clock::now(), u8"%Y-%m-%d %H:%M:%S") - 自动处理时区(默认为本地时区),也支持 UTC:
std::chrono::utc_clock::now()
注意:需编译器支持(GCC 13+、Clang 15+、MSVC 2025 17.4+),并开启 -std=c++20。
获取毫秒/微秒级时间戳(适合日志或性能测量)
若只需数字形式的时间戳(如记录毫秒数),可直接从 time_point 提取:
auto ms = std::chrono::duration_cast<:chrono::milliseconds>(now.time_since_epoch()).count();auto us = std::chrono::duration_cast<:chrono::microseconds>(now.time_since_epoch()).count();- 这类整数适合日志前缀、计时差值计算,也便于序列化存储
注意:不要用 count() 直接当作“毫秒时间戳”理解——它是相对于纪元的总毫秒数,不是当前小时内的毫秒。
声明:本站内容部分来源网络搜集发布,如有侵权请联系客服删除。
相关新闻
- 如何使用Golang读取文件内容_使用ioutil Read
- jimdo怎么插入html5画布_jimdo画布html5标
- css flex 容器内元素无法撑满高度怎么办_使用 str
- Win11怎么开启上帝模式_创建Windows 11 God
- 如何在Golang中实现RPC请求限流_保护后端服务稳定性
- 带双层背景的HTML5按钮CSS多层设置【教程】
- html5源代码发行怎么设置权限_访问权限控制方法与实践【指
- HTML5main标签作用是什么_页面主要内容区域界定【说明
- css fixed定位在移动端出现抖动怎么办_使用trans
- html5 plus怎么调用_HTML5 Plus在HBui