C++11 std::chrono主要类与函数总结:duration、time_point、system_clock、duration_cast(f)
先来看一段获取当前毫秒值的代码,我们根据这个代码进行拆分学习
#include
#include
int main()
{
// 重点语句
long long res = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count();
std::cout << res << std::endl;
return 0;
}
1、std::chrono::duration_cast<>()函数
template
constexpr ToDuration duration_cast(const duration& dtn);
这个函数主要用于将dtn(本身也是一个duration)的值转换为其他的duration类型;
使用方式:
/*
其中duration的类型有
std::chrono::hours
std::chrono::minutes
std::chrono::seconds
std::chrono::milliseconds
std::chrono::microseconds
std::chrono::nanoseconds
这些类型使用typedef定义的,详见std::chrono::duration
*/
std::chrono::duration_cast(dtnDuration);
2、std::chrono::duration类型
template >
class duration;
A duration object expresses a time span by means of a count and a period
一个duration对象通过count和period来表示一个时间跨度(time span).
Internally, the object stores the count as an object of member type
rep
(an alias of the first template parameter,Rep
), which can be retrieved by calling member function count.大体意思就是Rep有一个alias叫rep,这个rep是内部定义count变量的类型,要获取这个count的值可以直接调用count()函数。
下面是一些便于定义的duration的实例
type | Period |
---|---|
hours | ratio<3600, 1> |
minutes | ratio<60, 1> |
seconds | ratio<1, 1> |
milliseconds | ratio<1, 1000> |
microseconds | ratio<1, 1000000> |
nanoseconds | ratio<1, 1000000000> |
类中最重要的函数count()用来获取
count()函数的返回类型就是template中的Rep类型,可以使用typeid()函数来获取,示例代码如下
// 代码运行在64位centos上,其他位数机器可能不一样
#include
#include
#include // typeid
int main()
{
std::chrono::milliseconds m(1000);// 1秒
std::cout << typeid(m).name() << std::endl;
std::cout << typeid(m.count()).name() << std::endl; // l(小写的L,就是long)
return 0;
}
3、std::chrono::system_clock类
class system_clock;
Clock类提供当前time_point的访问
特别的,system_clock是一个全系统的实时时钟。
类的一些静态方法
3.1、now()
static time_point now() noexcept;
返回system_clock的当前time_point,time_point详见std::chrono::time_point类
3.2、to_time_t和from_time_t
用于和time_t类型的转换
4、std::chrono::time_point类
template
class time_point;
time_point表示相对于一个时钟纪元(clock’s epoch)的时间点
类的一些成员函数
time_since_epoch()
该函数返回一个duration对象,表示epoch和这个time point的时间跨度(time span)
这个epoch是1970年1月1号000000
小结:
通常程序中会出现获取当前时间的毫秒值、秒数、纳秒值等等时间点我们都可以用这段代码
#include
/*
typedef:
hours
minutes
seconds
milliseconds
microseconds
nanoseconds
*/
auto res = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count();
参考:
http://www.cplusplus.com/reference/chrono/