其他分享
首页 > 其他分享> > 时间

时间

作者:互联网

1 时钟

对于标准库来说,时钟就是时间信息源。具体来说,时钟是提供了四种信息的类
当前时间:如std::chrono::system_clock::now()
表示时间值的类型:std::chrono::time_point
时钟节拍(一个嘀嗒的周期):一般一秒有25个节拍,一个周期则为std::ratio
通过时钟节拍确定时钟是否稳定(steady,匀速):std::chrono::steady_clock::is_steady(稳定时钟,代表系统时钟的真实时间)、std::chrono::system_clock::is_steady(一般因为时钟可调节而不稳定,即使这是为了考虑本地时钟偏差的自动调节)、high_resolution_clock::is_steady(最小节拍最高精度的时钟)
打印当前系统时间(如果出现localtime不安全的警告,则在配置属性 - C/C++ - 预处理器 - 预处理器定义添加_CRT_SECURE_NO_WARNINGS)

std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
std::time_t now_c = std::chrono::system_clock::to_time_t(now); // 转为整数
std::cout << std::put_time(std::localtime(&now_c), "%F %T"); // %F即%Y-%m-%d,%T即%H:%M:%S

2 时间间隔std::chrono::duration

// 比如将表示秒的类型定义为
std::duration<int> // 即std::chrono::seconds
// 则表示分的类型可定义为
std::duration<int, std::ratio<60>> // 即std::chrono::minutes
// 表示毫秒的类型可定义为
std::duration<int, std::ratio<1, 1000>> // 即std::chrono::milliseconds

C++14的std::chrono_literals提供了表示时间的后缀

using namespace std::chrono_literals;
auto x = 45min; // 等价于std::chrono::minutes(45)
std::cout << x.count(); // 45
auto y = std::chrono::duration_cast<std::chrono::seconds>(x);
std::cout << y.count(); // 2700
auto z = std::chrono::duration_cast<std::chrono::hours>(x);
std::cout << z.count(); // 0(转换会截断)

duration支持四则运算

using namespace std::chrono_literals;
auto x = 1h;
auto y = 15min;
auto z = x - 2 * y;
std::cout << z.count(); // 30

3 时间点std::chrono::time_point

// 第一个模板参数为开始时间点的时钟类型,第二个为时间单位
std::chrono::time_point<std::chrono::system_clock, std::chrono::seconds>

time_point可以加减dutation
两个time_point也能相减,计算程序运行时间

auto start = std::chrono::high_resolution_clock::now();
doSomething();
auto stop = std::chrono::high_resolution_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(stop - start).count();

参考

1.https://downdemo.gitbook.io/cpp-concurrency-in-action-2ed
2.

标签:std,clock,chrono,时间,time,now,时钟
来源: https://blog.csdn.net/cutemypig/article/details/111831590