Table of Contents
使用C++11中便利的工具
处理日期和时间的chrono库
记录时长的duration
template<
class Rep,
class Period = std::ratio<1>
> class duration;
template<
std::intmax_t Num,
std::intmax_t Denom = 1
> class ratio;
duration类模板用于表示一段时间长度,duration模板类中会保存一个tick数,tick数的类型为Rep类型,每个tick代表的时间长度为Period指定的秒数,Period是一个ratio形式的分数。
看下chrono命名空间中,各个时间单位是怎么定义的:
typedef duration<Rep, ratio<3600, 1>> hours;
typedef duration<Rep, ratio<60, 1>> minutes;
typedef duration<Rep, ratio<1, 1>> seconds;
typedef duration<Rep, ratio<1, 1000>> milliseconds;
typedef duration<Rep, ratio<1, 1000000>> microseconds;
typedef duration<Rep, ratio<1, 1000000000>> nanoseconds;
duration中保存的tick数可以通过count()方法获得。
不同单位的duration类型之间可以相加减和互相转换,相加减时,单位就统一成两个操作数的单位的“分数形式”的最小公约数。
表示时间点的time_point
template<
class Clock,
class Duration = typename Clock::duration
> class time_point;
这个time_point其实和clock_gettime很像,选取一种时钟Clock,然后通过time_since_epoch方法获取自该时钟的Epoch开始过去了多长时间,只不过time_point返回的类型是duration而已(如果没有在模板参数中指定duration类型,那么就用指定的时钟Clock中的duration类型)。和clock_gettime返回的timespec的不同之处在于time_point把时钟类型也一起保存在这个值里了。
Clock的类型可以选择:
- system_clock,类比clock_gettime中的CLOCK_REALTIME
- steady_clock,类比clock_gettime中的CLOCK_MONOTONIC
- high_resolution_clock,系统支持的最高精度的时钟类型,可能就是system_clock或者steady_clock,也可能是其他的时钟实现
Clock的成员函数:
- now,返回一个代表当前时间点的time_point;
- to_time_t,将time_point转换为time_t;
- from_time_t,将time_t转换为time_point;
同一个时钟的time_point可以相减,不同时钟的time_point不可以进行相减运算。
数值类型和字符串的相互转换
数字转字符串:std::to_string和std::to_wstring。
字符串转数组:作者居然只讲了C里面就有的atoi,atol,atoll,atof这些,没有讲std::stoi,std::stol,std::stoul,std::stoll这些函数。
宽窄字符转换
Unicode,UTF8,宽字符傻傻分不清楚。需要先仔细学习一下这些概念先:)。
近期评论