《c++11学习笔记》 --- 处理日期和时间的chrono库

目录

1、记录时长的duration

 2、获取系统时钟的clocks

 3、计时器timer


1、记录时长的duration

duration表示一段时间间隔,用来记录时间长度,可以表示几秒、几分钟或者几个小时的时间间隔。
duration的原型如下:

template<class Rep, class Period = std::ratio<1, 1>>
class duration;

第一个模板参数Rep是一个数值类型,表示时钟数的类型;
第二个模板参数是一个默认模板参数std::ratio,表示时钟周期,它的原型如下:

template<std::intmax_t Num, std::intmax_t Denom = 1>
class ratio;

它表示每个时钟周期的秒数,其中第一个模板参数Num代表分子,Denom代表分母,分母默认为1,因此,ratio代表的是一个分子除以分母的分数值,比如ratio<2>代表一个时钟周期是两秒,ratio<60>代表一分钟, ratio<60*60>代表一个小时, ratio<60*60*24>代表一天。而ratio <1, 1000>代表的则是1/1000秒,即一毫秒,ratio<1, 1000000>代表一微秒,ratio<1, 1000000000>代表一纳秒。为了方便使用,标准库定义了一些常用的时间间隔,如时、分、秒、毫秒、微秒和纳秒,在chrono命名空间下,它们的定义如下:

typedef duration <Rep, ratio<3600,1>> hours;

typedef duration <Rep, ratio<60,1>> minutes;

typedef duration <Rep, ratio<1,1>> seconds;

typedef duration <Rep, ratio<1,1000>> milliseconds;

typedef duration <Rep, ratio<1,1000000>> microseconds;

typedef duration <Rep, ratio<1,100oo0oo00>> nanoseconds;

 2、获取系统时钟的clocks

clocks表示当前的系统时钟,内部有time_point、duration、Rep、Period等信息,主要用来获取当前时间,以及实现time_t和 time_point 的相互转换。clocks包含如下3种时钟: system_clock:代表真实世界的挂钟时间,具体时间值依赖于系统。system_clock 保证提供的时间值是一个可读时间。
steady_clock:不能被“调整”的时钟,并不一定代表真实世界的挂钟时间。保证先后调用now()得到的时间值是不会递减的。
high_resolution_clock:高精度时钟,实际上是system_clock或者steady_clock 的别名。可以通过now()来获取当前时间点,代码如下:

std::chrono::system_clock::time_point t1 = std::chrono::system_clock::now();
cout <<"Hello world\n" ;

std::chrono::system_clock::time_point t2 = std::chrono::system_clock::now();
cout<<(t2-t1).count()<<"tick count"<<endl;

system_clock的to_time_t方法可以将一个time_point转换为ctime:

std::time_t now_c = std::chrono::system_clock::to_time_t(time_point) ;

from_time_t将ctime转为time_point。

system_clock和std:put_time配合起来使用可以格式化日期的输出。

auto t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());

cout<< std::put_time(std::localtime(&t), "%Y-%m-%d %X")<<endl;

cout<< std::put_time(std::localtime(&t), "%Y-%m-%d %H.%M.%S" )<<endl;

 3、计时器timer

可以利用high_resolution_clock来实现一个类似于boost.timer的计时器,这样的timer在测试性能时经常用到。timer经常用于测试函数耗时,它的基本用法如下:

void fun ()
{
	cout<<"hello word"<<endl;
}
int main ()
{
	Timer t;
	//开始计时
	fun();
	cout<<t.elapsed()<<endl; //打印 fun函数耗时多少毫秒
	cout<<t.elapsed_micro()<<endl;//打印微秒
	cout<<t.elapsed_nano()<<endl ;//打印纳秒
	cout<<t.elapsed_seconds()<<endl;//打印秒
	cout<<t.elapsed_minutes()<<endl;//打印分钟
	cout<<t.elapsed_hours()<<endl;//打印小时
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值