C++11日期和时间

        C++11提供了对日期和时间进行操作的库chrono,该库提供的时钟类有3个,分别是system_clock、steady_clock和high_resolution_clock。其中,system_clock和high_resolution_clock是实时时钟(real time clock),会随如夏零时(在夏季把标准时间拨早1小时)这样的真实世界的时间的调整而改变,而steady_clock是单调时钟(monotonic clock),不随外界时间调整而改变。

输出时间点

        当需要输出具体的时间点时,这3种时钟均通过成员函数now获得其数据成员的时间点time_point,但在一般情况下,需要输出现实世界的时间,因此宜采用system_clock和high_resolution_clock。这二者的区别在于后者的精度更高。

        将时间以标准日历形式输出时,需要使用时钟类的成员函数to_time_t将now成员函数获取的时间点time_point转换成time_t类型,然后通过库函数gmtime将time_t类型时间转换成日历时间,最后使用iomanip库中的put_time函数将日历时间转换成各种时间书写形式的标准输出流。

using namespace chrono;
time_t tt = system_clock::to_time_t(system_clock::now());
/*put_time的第二个参数中的格式控制符F表示“%Y - %M - %d”格式日期,T表示“%H:%M:%S”格式时间*/
cout << put_time(gmtime(&tt)), "% F % T") << endl;    //2023 - 06 - 09 11:45:08

 输出时间间隔

        在运行某种算法时常常需要知道它的时耗,在chromo库中有一个专门的类duration用来表示时间段。前后两个时间点time_point的相减运算得到的结果就是duration类型。在输出时间间隔时,还需要通过一个转换函数duration_cast将时间段转换成特定的时间单位,如毫秒、小时等,最后使用duration的成员函数count获取最终结果。

/*考虑到测量时间间隔需要稳定不变的时钟,代码中使用的时钟是steady_clock*/
auto start = steady_clock::now();
doSometing();    //执行某种算法
auto end = steady_clock::now();
auto interval = duration_cast(end - start);
cout << interval.cout() << endl;

你可能感兴趣的:(C++,C++11)