C++20新特性—时间库

C++11中的时间库有三个基本概念:

Duration:表示两个时刻的度量,如时、分、秒都是duration。duration内部是通过count和计量精度(period precision)来衡量duration,其中period precision表示成秒的倍率值(ratio)。

Time point:表达某一特定的时刻点,但实际上,绝对的时刻点是不存在的,因此time point也是由duration来表达的,它是机器上的clock相对于epoch的duration。

Clock:用time point来表达现实(机器)中的时刻。

C++11库中有三种clock:system_clock(日历时钟,可被手工调整), steady_clock(稳定增长的时钟,由机器tick计算而来)和high_resolution_clock(由具体实现确定,可能是system_clock或steady_clock)。

C++20将clock概念进行了规范化。

template<class T>
     requires {
            typename T::rep;
            typename T::period;
            typename T::duration;
            typename T::time_point;
            T::is_steady;
            T::now();
        }

满足上面条件的T就可以称为”clock”。另外,还有一个TrivialClock的概念,即在满足clock要求的基础上,还要求:

  • 类型TC::rep, TC::duration, and TC::time_point 满足EqualityComparable, LessThanComparable, DefaultConstructible, CopyConstructible, CopyAssignable, Destructible和NumericType.
  • 类型TC::rep, TC::duration, and TC::time_point的左值是可交换的(Swappable)
  • TC::now()函数为throw exceptions
  • 类型TC::time_point::clock也递归地满足TrivialClock要求

C++20增加了几个clock类:

  • utc_clock:表示协调世界时,人为“协调”(闰秒),从00:00:00, 1 January 1970开始
  • tai_clock:表示国际原子时,恒定时间,从00:00:00, 1 January 1958开始。
  • gps_clock:表示GPS时间,没有闰秒,从00:00:00, 6 January 1980开始
  • file_clock:用于文件系统,它的epoch未指定。
  • local_t:表示本地(虚拟)时间,未指定时区。

关于UTC,TAI,GPS时间的背景知识,可查阅相关文档。
除local_t外,上面的类都满足clock要求,并且std::chrono::system_clock、std::chrono::steady_clock、std::chrono::high_resolution_clock、std::filesystem::file_time_type::clock、std::chrono::file_clock满足TrivialClock要求。
C++20增加了另外三个概念:

  • time of day:一天内的时、分、秒,即从午夜开始的durantion。
  • Calendar:与日历相关的年、月、日、周。
  • time-zone:与地理相关的时区,基础信息来源于Time Zone Database。

【目前的gcc10.2还未支持这部分扩展,就没有示例了,以后进行补充。】

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值