失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > c++11 日期和时间工具(std::chrono::duration)(三)

c++11 日期和时间工具(std::chrono::duration)(三)

时间:2022-01-08 16:10:40

相关推荐

c++11 日期和时间工具(std::chrono::duration)(三)

定义于头文件 <chrono>

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

类模板 std::chrono::duration 表示时间间隔。

它由 Rep 类型的计次数和计次周期组成,其中计次周期是一个编译期有理数常量,表示从一个计次到下一个的秒数。

存储于 duration 的数据仅有 Rep 类型的计次数。若 Rep 是浮点数,则 duration 能表示小数的计次数。 Period 被包含为时长类型的一部分,且只在不同时长间转换时使用。

特化 std::common_type 特征

std::common_type(std::chrono::duration)

template <class Rep1, class Period1, class Rep2, class Period2>struct common_type<std::chrono::duration<Rep1, Period1>,std::chrono::duration<Rep2, Period2>> {typedef std::chrono::duration<typename std::common_type<Rep1, Rep2>::type, /*see note*/> type;};

暴露名为type的类型,它是二个 std::chrono::duration 的共用类型。

注意

结果 duration 的周期是Period1Period2的最大公约数。

调用示例

#include <iostream>#include <chrono>// std::chrono 已找到最大公约数,类似使用 std::common_type<> 。// 我们令类型推导外化。template <typename T, typename S>auto durationDiff(const T& t, const S& s) -> typename std::common_type<T, S>::type{typedef typename std::common_type<T, S>::type Common;return Common(t) - Common(s);}int main(){typedef std::chrono::milliseconds milliseconds;typedef std::chrono::microseconds microseconds;auto ms = milliseconds(30);auto us = microseconds(1100);std::cout << ms.count() << "ms - " << us.count() << "us = "<< durationDiff(ms, us).count() << "\n";}

实现以时长为实参的算术运算

operator+,-,*,/,%(std::chrono::duration)

在二个 duration 或 duration 和计次数之间进行基本算术运算。

1) 转换二个 duration 为其共用类型,并创建计次数为转换后计次数之和的 duration 。

2) 转换二个 duration 为其共用类型,并创建计次数为转换后从lhs的计次数减去rhs的计次数的 duration 。

3-4) 转换 durationd到其repRep1Rep2之间的共用类型的 duration ,并将转换后的计次数乘s

5) 转换 durationd到其repRep1Rep2之间的共用类型的 duration ,并将转换后的计次数除以s

6) 转换二个 duration 为其共用类型,并将lhs转换后的计次数除以rhs转换后的计次数。注意此运算符的返回值不是 duration 。

7) 转换转换 durationd到其repRep1Rep2之间的共用类型的 duration ,并创建计次数为此时长的计次数除以s的 duration 。

8) 转换二个 duration 为其共用类型,并创建计次数为转换后计次数取余的 duration 。

参数

返回值

假设 CD 为函数返回类型且 CR<A, B> = std::common_type<A, B>::type ,则:

1) CD(CD(lhs).count() + CD(rhs).count())

2) CD(CD(lhs).count() - CD(rhs).count())

3-4) CD(CD(d).count() * s)

5) CD(CD(d).count() / s).

6) CD(lhs).count() / CD(rhs).count() (此运算符的返回类型非 duration )

7) CD(CD(d).count() % s)

8) CD(CD(lhs).count() % CD(rhs).count())

调用示例

#include <chrono>#include <iostream>int main(){// 简单算术std::chrono::seconds s = std::chrono::hours(1)+ 2 * std::chrono::minutes(10)+ std::chrono::seconds(70) / 10;std::cout << "1 hour + 2*10 min + 70/10 sec = " << s.count() << " seconds\n";// 时长除以一个数和时长除以另一时长的区别std::cout << "Dividing that by 2 minutes gives "<< s / std::chrono::minutes(2) << '\n';std::cout << "Dividing that by 2 gives "<< (s / 2).count() << " seconds\n";// 余数运算符在确定此特定时长在时间框架的场合有用,// 例如,拆分它为时、分和秒:std::cout << s.count() << " seconds is "<< std::chrono::duration_cast<std::chrono::hours>(s).count() << " hours, "<< std::chrono::duration_cast<std::chrono::minutes>(s % std::chrono::hours(1)).count() << " minutes, "<< std::chrono::duration_cast<std::chrono::seconds>(s % std::chrono::minutes(1)).count() << " seconds\n";}

输出

如果觉得《c++11 日期和时间工具(std::chrono::duration)(三)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。