chrono库包含3种类型:时间间隔duration、时间点time point和时钟clocks
1、时间段:duration、duration_cast
原型:template<class Rep, class Period = std::ratio<1, 1>> class duration; //std::ratio<p1, p2>是一个分数, p1为分子, p2为分母, 默认为1, 1;例:在chrono命名空间下, 时、分、秒、毫秒、微妙、纳秒的定义
typedef duration<long long, nano> nanoseconds; //typedef ratio<1, 1000000000> nano;
typedef duration<long long, micro> microseconds; //typedef ratio<1, 1000000> micro;
typedef duration<long long, milli> milliseconds; //typedef ratio<1, 1000> milli;
typedef duration<long long> seconds;
typedef duration<int, ratio<60> > minutes;
typedef duration<int, ratio<3600> > hours;
用法:std::this_thread::sleep_for(std::chrono::milliseconds(500)); 当前线程休息500毫秒
获取时钟周期数:count()
hours h(3);
h.count();
2、时间点:time point
①time_since_epoch() 获得1970年1月1日到time_point()时间经过的duration
用法:获取子1970以来的天数
typedef std::chrono::duration<int, std::ratio<3600 * 24>> day_types;
std::chrono::time_point<system_clock, day_types> today = std::chrono::system_clock:now(); //获取当前时间, day_types为自定义类型天, 也可以为系统类型seconds等,也可以省略;
std::cout<<today.time_since_epoch().cout(); //打印自1970年到today的天数
②格式化输出时间点(vs2013以上版本才支持)
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
std::time_t last = system_clock::to_time_t(now - hours(24)); //将一个time_point转化为ctime, 与之对应的函数from_time_t将ctime转化为time_point
std::put_time(std::localtime(&last), "%F %T")<<'\n'; -->2015-10-20 16:04:11 //格式化输出, 此函数必须vs2013以上版本才支持, 其它格式"%Y-%m-%d %H:%M:%S";
3、时钟clocks
①system_clock: 系统时间
②steady_clock: 不能被调整的时钟, 保证先后调用now()得到的时间值是不会递减的;
③high_resolution_clock: 高精度时钟
例:std::chrono::system_clock::time_point t1 = std::chrono::system_clock:now(); //获取当前时间点
std::chrono::system_clock::time_point t2 = std::chrono::system_clock::now();
std::cout<<std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count()<<'\n'; //打印时间差