cpp使用chrono获取当前时间

本文最后更新于:2022年9月29日 下午

cpp使用chrono获取当前时间

有时候我们需要测试一个函数的运行时间,可以使用 std中的chrono来完成此功能,示例代码如下。

示例

示例1

测试代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <chrono>
#include <iostream>

int main() {

// 获取当前时间
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();

// 距离1970-01-01 00:00:00的纳秒数
std::chrono::nanoseconds d = now.time_since_epoch();
std::cout <<"current nanoseconds: " << d.count() << std::endl;

// 转换为微秒数, 会有精度损失
std::chrono::microseconds mcrosec = std::chrono::duration_cast<std::chrono::microseconds>(d);
std::cout<<"current microseconds: " << mcrosec.count() <<std::endl;

// 转换为毫秒数, 会有精度损失
std::chrono::milliseconds millsec = std::chrono::duration_cast<std::chrono::milliseconds>(d);
std::cout<<"current milliseconds: " << millsec.count() << std::endl;

// 转换为秒数,会有精度损失
std::chrono::seconds sec = std::chrono::duration_cast<std::chrono::seconds>(d);
std::cout<<"current seconds: " << sec.count() << std::endl;

// 转换为分,会有精度损失
std::chrono::minutes minutes = std::chrono::duration_cast<std::chrono::minutes>(d);
std::cout<<"current minutes: " << minutes.count() << std::endl;

return 0;
}

示例2

测试代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <chrono>

int main() {
// 计算一段程序运行的时间,单位ms
auto t1 = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
for(int i=0;i<1000000;i++);
auto t2 = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
std::cout << t2 - t1 << std::endl;

// 计算一段程序运行的时间,单位us
int64_t t11 = std::chrono::duration_cast<std::chrono::microseconds >(std::chrono::system_clock::now().time_since_epoch()).count();
for(int i=0;i<1000000;i++);
int64_t t12 = std::chrono::duration_cast<std::chrono::microseconds >(std::chrono::system_clock::now().time_since_epoch()).count();
std::cout << t12 - t11 << std::endl;

// 计算一段程序运行的时间,单位ns
int64_t t21 = std::chrono::system_clock::now().time_since_epoch().count();
for(int i=0;i<1000000;i++);
int64_t t22 = std::chrono::system_clock::now().time_since_epoch().count();
std::cout << t22 - t21 << std::endl;
return 0;
}

需注意:不同的时间精度用来存储的类型可以不同,但需要满足其条件,否则会溢出。

单位 长度
nanoseconds/纳秒 至少 64bits 的有符号数
microseconds/微妙 至少 55bits 的有符号数
milliseconds/毫秒 至少 45bits 的有符号数
seconds/秒 至少 35bits 的有符号数
minutes/分 至少 29bits 的有符号数
hours/时 至少 23bits 的有符号数

参考

  1. cpp reference chrono

cpp使用chrono获取当前时间
https://www.glj0.top/posts/d152f189/
作者
gong lj
发布于
2022年4月25日
更新于
2022年9月29日
许可协议