前言
c++11 提供了与时间和日期相关的功能库 <chrono>
<chrono>包含了几个命名空间,提供了各种类和函数来处理时间、日期和持续时间;
内容
获取当前时间点
void functionName()
{
// 使用high_resolution_clock获取当前时间点
auto now = std::chrono::high_resolution_clock::now();
// 转换为time_t格式,便于转换为本地时间
std::time_t time_now = std::chrono::high_resolution_clock::to_time_t(now);
// 使用ctime转换为本地时间
std::cout << std::ctime(&time_now) << std::endl;
}
char* ctime(const time_t *__timer)
作用:返回一个表示基于参数 timer(当地时间)的字符串
std::chrono::time_point : 表示一个特定的时间点;(上述代码中的now 为该数据类型)
std::chrono::system_clock::time_point 表示当前系统时间;
std::chrono::high_resolution_clock:表示一个高分辨率的时钟,它提供最短的可能时间刻度。
时间转换
void functionNmae()
{
std::chrono::nanoseconds ns(1000);
// 获取总纳秒数
long long ns_count = ns.count();
// 转换为秒
std::chrono::seconds s = std::chrono::duration_cast<std::chrono::seconds>(ns);
// 获取总秒数
long long s = s.count();
}
// 代码来源 http://t.csdnimg.cn/t9umQ
std::chrono::nanoseconds() 对象表示一个纳秒单位;
std::chrono::seconds() 对象表示一个秒单位;
std::chrono::duration_cast:用于将一个std::chrono::duration对象转换为另一种类型。
std::chrono::duration:是一个模板类,表示一段时间间隔。
std::chrono::nanoseconds()和std::chrono::seconds()是具体时间单位类型。
void getNowTime()
{
auto now = std::chrono::system_clock::now();
std::time_t now_struct = std::chrono::system_clock::to_time_t(now);
std::cout << std::ctime(&now_struct) << endl;
auto start = std::chrono::steady_clock::now();
for (int i = 0; i < 10000; i++)
{
for (auto j = 0; j < 10000; j++)
{
}
}
auto end = std::chrono::steady_clock::now();
auto duration = end - start;
std::cout << "dur::" << duration.count() << endl;
{
auto convert_start = std::chrono::time_point_cast<std::chrono::milliseconds>(start);
auto convert_end = std::chrono::time_point_cast<std::chrono::milliseconds>(end);
auto dur = convert_end - convert_start;
std::cout << "dur::" << dur.count() << endl;
}
}
std::chrono::system_clock::now():返回当前系统时间
std::chrono::steady_clock::now() : 返回当前的稳定时间;(提供了一个不受系统时间更改影响的计时方式)
std::chrono::time_point_cast: 将一个std::chrono::time_point对象转换为另一种类型。
计算时间间隔
void functionName()
{
auto start = std::chrono::high_resolution_clock::now();
// 模拟耗时操作
// 该线程睡眠一个秒单位
std::this_thread::sleep_for(std::chrono::seconds(1));
auto finish = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> elapsed = finish - start;
std::cout << "Elapsed time: " << elapsed.count() << "s\n";
}