12人参与 • 2025-06-04 • C/C++
示例代码
auto now = std::chrono::system_clock::now(); auto t = std::chrono::system_clock::to_time_t(now); auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()) % 1000; std::ostringstream oss; oss << std::put_time(std::localtime(&t), "%f %t") << "." << std::setw(3) << std::setfill('0') << ms.count();
这段代码使用c++11的<chrono>
库获取当前时间并生成带毫秒的时间戳字符串。
获取当前时间点
auto now = std::chrono::system_clock::now();
system_clock::now()
: 获取当前系统时间点(utc时间)std::chrono::system_clock::time_point
转换为c风格时间
auto t = std::chrono::system_clock::to_time_t(now);
to_time_t()
: 将time_point
转换为time_t
(自1970-01-01起经过的秒数)提取毫秒部分
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>( now.time_since_epoch() ) % 1000;
time_since_epoch()
: 获取从时钟纪元到now
的时间间隔duration_cast<milliseconds>
: 将时间间隔转换为毫秒精度% 1000
: 取模运算获取当前秒内的毫秒数(0-999)格式化输出
oss << std::put_time(std::localtime(&t), "%f %t") << "." << std::setw(3) << std::setfill('0') << ms.count();
localtime(&t)
: 将time_t
转换为本地时间的tm
结构put_time(..., "%f %t")
: 格式化为yyyy-mm-dd hh:mm:ss
%f
等价于 %y-%m-%d
%t
等价于 %h:%m:%s
ms.count()
: 获取毫秒数值(整数)setw(3)
+ setfill('0')
: 确保毫秒固定3位(如5→"005")最终输出格式yyyy-mm-dd hh:mm:ss.sss
示例:2023-10-05 14:30:45.123
注意事项
线程安全性:std::localtime
不是线程安全的(使用静态缓冲区)。多线程环境下应改用:
std::tm tm_buf; localtime_r(&t, &tm_buf); // posix // 或 localtime_s(&tm_buf, &t); // windows
c++20替代方案:
c++20的<chrono>
库提供更简洁的时间格式化:
auto now = std::chrono::system_clock::now(); return std::format("{:%y-%m-%d %h:%m:%s}", now);
精度控制:
当前代码精确到毫秒,如需微秒/纳秒:
// 微秒示例 auto us = std::chrono::duration_cast<std::chrono::microseconds>( now.time_since_epoch() ) % 1000000;
到此这篇关于c/c++ chrono简单使用场景示例详解的文章就介绍到这了,更多相关c++ chrono使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论