目录
C++11中提供了日期和时间相关的库chrono。
chrono库主要包含三种范例的类:时间间隔duration、时钟clocks、时间点time point。
时间间隔duration
duration表示一段时间间隔,用来记录时间长度,可以表示几秒、几分钟、几个小时的时间间隔。duration的原型如下:- // 定义于头文件 <chrono>
- template<
- class Rep, //单位类型 == 单位次数(多少个单位) == 多少个周期数
- class Period = std::ratio<1> //单位 Period:周期,默认周期为1s
- > class duration;
复制代码 模板参数:
- Rep:Representation(表示),这是一个数值范例,用于表示时钟数(周期)的范例(默认为整形)。若 Rep 是浮点数,则 duration 能使用小数描述时钟周期的数目。
- Period:表示时钟的周期,它的原型如下:
- // 定义于头文件 <ratio>
- template<
- std::intmax_t Num,
- std::intmax_t Denom = 1
- > class ratio;
复制代码 位于定名空间std
ratio(比率;比例)类表示每个时钟周期的单位,如秒、毫秒、微秒,其中第一个模板参数Num(Numerator)代表分子,Denom(denominator)代表分母,该分母值默认为1,因此,ratio代表的是一个分子除以分母的数值,比如:ratio代表一个时钟周期是2秒,ratio代表一分钟,ratio代表一个小时,ratio代表一天。而ratio代表的是1/1000秒,也就是1毫秒,ratio代表一微秒,ratio代表一纳秒。
std::ratio - cppreference.com
常用的duration
为了方便使用,在标准库中定义了一些常用的时间间隔,比如:时、分、秒、毫秒、微秒、纳秒,它们都位于chrono定名空间下,定义如下:
范例定义纳秒:std::chrono::nanosecondsusing nanoseconds = duration;微秒:std::chrono::microsecondsusing microseconds = duration;毫秒:std::chrono::millisecondsusing milliseconds = duration;秒 :std::chrono::secondsusing seconds = duration;分钟:std::chrono::minutesusing minutes = duration;小时:std::chrono::hoursusing hours = duration;
- // 1. 拷贝构造函数
- duration( const duration& ) = default; //浅拷贝
- // 2. 通过指定时钟周期的类型和次数来构造对象(以缺省单位秒直接构造)j
- template< class Rep2 >
- constexpr explicit duration( const Rep2& r ); //std::chrono::duration<int> sec(1);//1秒
- // 3. 通过指定时钟周期类型,和时钟周期长度来构造对象
- template< class Rep2, class Period2 >
- constexpr duration( const duration<Rep2,Period2>& d );//改变单位
复制代码
- 为了更加方便的进行duration对象之间的操作,类内部进行了操作符重载:
- duration& operator= (const duration& rhs) = default;
- constexpr duration operator+() const;
- constexpr duration operator-() const;
- duration& operator++();
- duration operator++(int);
- duration& operator--();
- duration operator--(int);
- duration& operator+= (const duration& rhs);
- duration& operator-= (const duration& rhs);
- duration& operator*= (const rep& r);
- duration& operator/= (const rep& r);
- duration& operator%= (const rep& r);
- duration& operator%= (const duration& rhs);
复制代码
注意事项:duration的加减运算有一定的规则,当两个duration时钟周期不相同的时候,会先统一成一种时钟,然后再进行算术运算,统一的规则如下:假设有ratio 和 ratio两个时钟周期,首先需要求出x1,x2的最大公约数X,然后求出y1,y2的最小公倍数Y,统一之后的时钟周期ratio为ratio。
exam:
[code] std::chrono::duration d1(3); //单位为9/7秒 std::chrono::duration d2(1); //单位为6/5秒 /* 9和6的最大公约数是3; 7和5的最小公倍数是35; */ // d1 和 d2 统一之后的时钟周期 std::chrono::duration d4 = d1 - d2; auto d3 = d1 - d2; std::cout |