C++中关于时间的头文件chrono

参考链接

简介

chrono头文件是C++中用于解决关于时间问题的头文件,他主要由三个概念来实现。

一.时钟(Clocks)

时钟是将时间点和物理上的时间关联起来的框架。在这个库文件里,提供了3个时钟。分别是系统时钟(system_clock),稳定时钟(steady_clock)和高精度时钟( high_resolution_clock) 。

1.系统时钟

通过这个类可以获取现在的系统时间,他有以下三个静态函数

C++中关于时间的头文件chrono

chrono::system_clock::now  //获取当前时间点(time_point)
chrono::system_clock::to_time_t  //将时间点转换为time_t类型
chrono::system_clock::from_time_t //将time_t类型转化为时间点

code

实例:获取当前日期

C++中关于时间的头文件chrono

#include<iostream>
#include<ctime>
#include<chrono>
using namespace std;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    auto now = chrono::system_clock::now();
    auto tmp = chrono::system_clock::to_time_t(now);
    cout<<ctime(&tmp)<<endl; //Thu Apr 09 21:48:26 2020
    return 0;
}

View Code

2.稳定时钟

这个时钟一般用来计算时间差,如代码运行时间。

实例:

C++中关于时间的头文件chrono

#include<iostream>
#include<ctime>
#include<chrono>
using namespace std;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    auto st = chrono::steady_clock::now();
    for(int i=0;i<1e6;i++)
        int tmp;
    auto ed = chrono::steady_clock::now();
    auto cost =  chrono::duration_cast<chrono::duration<double>> (ed-st); //默认是微妙,将其转化为秒
    cout<<cost.count()<<'s'<<endl;
    return 0;
}

View Code

3.高精度时钟

其内部时间刻度比其他两个时钟更短,精确度更高。

二.时间点(time_point)

用于表示一个相对于时钟纪元(1970年1月1日0时0分0秒)的时间点

三.时间间隔(duration)

 表示时间间隔,如1秒,1天等,这里是他的一些别名

C++中关于时间的头文件chrono

相互之间的联系

时间间隔(duration)代表着两个时间点(time_point)之差。只有在同一个时钟下的时间间隔才有意义。

如何使用时间间隔(duration)

duration的构造函数

  • duration()
  • duration (const duration& dtn);
  • template<class Rep2, class Period2>
    constexpr duration (const duration<Rep2,Period2>& dtn);

  • template<class Rep2>
    constexpr explicit duration (const Rep2& n);

类模板参数中的Rep2指的是数据类型如int等,用于表示间隔差的数据类型,Period2指间隔周期与1s的比值,1s可以用ratio<1,1>表示,1小时可以用ratio<3600,1>表示

chrono::hours hour(10); //声明10个小时的时间间隔
chrono::duration<int64_t,ratio<3600,1>> h(10); //声明10个小时的时间间隔

时间间隔之间的单位转化

chrono::duration<long long,ratio<1,1>> s(60);
auto res = chrono::duration_cast<chrono::minutes>(s); //将其转化为以分钟为单位
cout<<res.count()<<endl;  // 1

如何使用时间点(time_point)

构造函数

  •  time_point();
  • template <class Duration2>
    time_point (const time_point<clock,Duration2>& tp);

  • explicit time_point (const duration& dtn);

构造一个使用系统时钟的时间点

chrono::time_point<chrono::system_clock,chrono::seconds> tp1(chrono::seconds(50)); // 相对于1970.01.01.00.00.00增加了50秒
auto time = chrono::system_clock::to_time_t(tp1); // 将时间点转化为time_t类型
cout<<ctime(&time)<<endl; // Thu Jan 01 08:00:50 1970 由于我们时区是UTC+8,所以结果会增加8小时

计算两个时间点的差值

chrono::time_point<chrono::system_clock,chrono::minutes> tp1(chrono::minutes(50)); //
chrono::time_point<chrono::system_clock,chrono::hours> tp2(chrono::hours(1));
auto res = tp2-tp1;
cout<<res.count()<<endl;  // 10分钟

 

原文链接: https://www.cnblogs.com/swustzww/p/12669718.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++中关于时间的头文件chrono

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/341067

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午12:54
下一篇 2023年3月2日 上午12:54

相关推荐