C/C++ chrono简单使用场景示例详解
目录
- chrono使用场景举例
- 1 输出格式化字符串
chrono使用场景编程客栈举例
1 输出格式化字符串
示例代码
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::ostringstreapythonm 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起经过的秒数)- 用于后续调用传统C时间函数
提取毫秒部分
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; local编程客栈time_r(&t, &tm_buf); // POSIpythonX // 或 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使用内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论