c++ 关于chrono的基础操作

前言

        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";
}
  • 20
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直在找资料的菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值