码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-04-10 11:58:40      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:ati   间隔   意义   函数   ide   物理   时间间隔   target   增加   

参考链接

简介

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

一.时钟(Clocks)

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

1.系统时钟

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

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

实例:获取当前日期

技术图片
#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.稳定时钟

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

实例:

技术图片
#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天等,这里是他的一些别名

技术图片

相互之间的联系

时间间隔(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分钟

 

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

标签:ati   间隔   意义   函数   ide   物理   时间间隔   target   增加   

原文地址:https://www.cnblogs.com/swustzww/p/12669718.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!