C++ 高精度时间库 chrono 详解
在 C++11 之前,我们处理时间基本靠 time_t、clock() 和 struct timespec。这种方式的问题在于类型不安全。函数参数传递 time_t,你无法直观知道单位是秒还是毫秒;做时间运算时,极易因单位混淆导致 bug。
<chrono> 库最伟大的贡献,就是引入了编译期类型安全和精度无关的时间处理模型。它将时间抽象为三个核心概念:
- 时间段 (Duration):由数值和单位组成的强类型。例如
std::chrono::seconds(10)就是 10 秒,std::chrono::milliseconds(1000)是 1000 毫秒,它们在类型上就不同,不能直接隐式转换,避免了单位混淆。 - 时间点 (Time Point):某个特定时钟上的一个点,由时钟和时间段共同定义。它本质上是从某个固定的纪元开始到现在的时间段。
- 时钟 (Clock):提供了获取当前时间点的入口 (
now()),并定义了时间点的精度和纪元。
库中的单位
时长单位(Duration Units)
这些是表示时间间隔的类型,基于 duration 模板定义。
| 单位名称 | 引入标准 | 说明 |
|---|---|---|
std::chrono::nanoseconds | C++11 | 纳秒 |
std::chrono::microseconds | C++11 | 微秒 |
std::chrono::milliseconds | C++11 | 毫秒 |
std::chrono::seconds | C++11 | 秒 |
std::chrono::minutes | C++11 | 分钟 |
std::chrono::hours | C++11 | 小时 |
std::chrono::days | C++20 | 天 |
std::chrono::weeks | C++20 | 周 |
std::chrono::months | C++20 | 月 |
std::chrono::years | C++20 | 年 |
时钟单位(Clock Types)
时钟定义了时间的原点和刻度,用于产生时间点。
| 时钟名称 | 引入标准 | 说明 |
|---|---|---|


