(原创)c++11中的日期和时间库(二)
:chrono::steady_clock::time_point t1 = std::chrono::system_clock::now();
std::cout << "Hello World\n";
std::chrono::steady_clock::time_point t2 = std::chrono:: system_clock::now();
std::cout << (t2-t1).count()<<” tick count”<
}
复制代码
输出:
Hello World
20801tick count
通过时钟获取两个时间点之相差多少个时钟周期,我们可以通过duration_cast将其转换为其它时钟周期的duration:
cout << std::chrono::duration_cast( t2-t1 ).count() <<” microseconds”<< endl;
输出:
20 microseconds
system_clock的to_time_t方法可以将一个time_point转换为ctime:
std::time_t now_c = std::chrono::system_clock::to_time_t(time_point);
而from_time_t方法则是相反的,它将ctime转换为time_point。
steady_clock可以获取稳定可靠的时间间隔,后一次调用now()的值和前一次的差值是不因为修改了系统时间而改变,它保证了稳定的时间间隔。它的用法和system用法一样。
时间的格式化输出
system_clock和std::put_time配合起来使用可以格式化日期的输出,std::put_time能将日期格式化输出。下面的例子是将当前时间格式化输出:
复制代码
#include
#include
#include
#include
using namespace std;
int main()
{
auto t = chrono::system_clock::to_time_t(std::chrono::system_clock::now());
cout<< std::put_time(std::localtime(&t), "%Y-%m-%d %X")<
cout<< std::put_time(std::localtime(&t), "%Y-%m-%d %H.%M.%S")<
return 0;
}
复制代码
上面的例子将输出:
2014-3-27 22:11:49
2014-3-27 22.11.49
timer
可以利用high_resolution_clock来实现一个类似于boost.timer的定时器,这样的timer在测试性能时会经常用到,经常用它来测试函数耗时,它的基本用法是这样的:
复制代码
void fun()
{
cout<<”hello word”<
}
int main()
{
timer t; //开始计时
fun()
cout<
}
复制代码
c++11中增加了chrono库,现在用来实现一个定时器是很简单的事情,还可以移除对boost的依赖。它的实现比较简单,下面是具体实现:
复制代码
#include
usingnamespace std;
usingnamespace std::chrono;
classTimer
{
public:
Timer() : m_begin(high_resolution_clock::now()) {}
void reset() { m_begin = high_resolution_clock::now(); }
//默认输出毫秒
int64_t elapsed() const
{
return duration_cast(high_resolution_clock::now() - m_begin).count();
}
//微秒
int64_t elapsed_micro() const
{
return duration_cast(high_resolution_clock::now() - m_begin).count();
}
//纳秒
int64_t elapsed_nano() const
{
return duration_cast(high_resolution_clock::now() - m_begin).count();
}
//秒
int64_t elapsed_seconds() const
{
return duration_cast(high_resolution_clock::now() - m_begin).count();
}
//分
int64_t elapsed_minutes() const
{
return duration_cast(high_resolution_clock::now() - m_begin).count();
}
//时
int64_t elapsed_hours() const
{
return duration_cast(high_resolution_clock::now() - m_begin).count();
}
private:
time_point m_begin;
};
复制代码
测试代码:
复制代码
void fun()
{