• c++11日期和时间工具-(std::chrono::system_clock)


    定义于头文件 

    std::chrono

    chrono 库定义三种主要类型以及工具函数和常用 typedef 。

    • 时钟
    • 时长
    • 时间点

    来自系统范畴实时时钟的挂钟时间

    std::chrono::system_clock
    class system_clock;                  (C++11 起) 

    std::chrono::system_clock 表示系统范围的实时壁钟。

    它可以不单调:大多数系统上,系统时间可以在任何时候被调节。它是唯一有能力映射其时间点到 C 风格时间,从而能显示 (C++20 前)的 C++ 时钟。

    std::chrono::system_clock 满足平凡时钟 (TrivialClock) 的要求。

    成员类型

    成员类型定义
    rep表示时钟时长中计次数的有符号算术类型
    period表示时钟计次周期的 std::ratio 类型,单位为秒
    durationstd::chrono::duration ,足以表示负时长
    time_pointstd::chrono::time_point

    成员常量

    constexpr bool is_steady

    [静态]

    若时间间隔计次始终为常数,即纵使在调整了外部时钟的情况下,调用 now() 的返回值亦单调递增,则为 true ;否则为 false

    返回表示时间中当前点的 std::chrono::time_point

    std::chrono::system_clock::now
    1. static std::chrono::time_point<std::chrono::system_clock>
    2. now() noexcept; (C++11 起)

    返回表示当前时间的时间点。

    参数

    (无)

    返回值

    表示当前时间的时间点。

    调用示例

    1. #include <iostream>
    2. #include <vector>
    3. #include <numeric>
    4. #include <chrono>
    5. volatile int sink;
    6. int main()
    7. {
    8. for (auto size = 1ull; size < 1000000000ull; size *= 100)
    9. {
    10. // 记录开始时间
    11. // auto start = std::chrono::system_clock::now();
    12. std::chrono::system_clock::time_point start = std::chrono::system_clock::now();
    13. // 做一些工作
    14. std::vector<int> v(size, 100);
    15. sink = std::accumulate(v.begin(), v.end(), 0u); // 确保其副效应
    16. // 记录结束时间
    17. auto end = std::chrono::system_clock::now();
    18. std::chrono::duration<double> diff = end - start;
    19. std::cout << "Time to fill and iterate a vector of "
    20. << size << " ints : " << diff.count() << " s\n";
    21. }
    22. }

    输出

    转换系统时钟时间点为 std::time_t

    std::chrono::system_clock::to_time_t
    1. static std::time_t to_time_t
    2. ( const time_point& t ) noexcept; (C++11 起)

    转换 t 为 std::time_t 类型。

    若 std::time_t 拥有较低精度,则是舍入还是截断值是实现定义的。

    参数

    t-要转换的系统时钟时间点

    返回值

    表示 t 的 std::time_t 值。

    调用示例

    1. #include <iostream>
    2. #include <vector>
    3. #include <chrono>
    4. #include<thread>
    5. int main()
    6. {
    7. int s = 1;
    8. for (auto size = 1ull; size < 1000000000ull; size *= 100)
    9. {
    10. // 记录开始时间
    11. // auto start = std::chrono::system_clock::now();
    12. std::chrono::system_clock::time_point start = std::chrono::system_clock::now();
    13. // 做一些工作
    14. std::this_thread::sleep_for(std::chrono::seconds(s));
    15. // 记录结束时间
    16. auto end = std::chrono::system_clock::now();
    17. std::time_t start_t = std::chrono::system_clock::to_time_t(start);
    18. std::time_t end_t = std::chrono::system_clock::to_time_t(end);
    19. std::cout << "end_t( " << end_t << " ) - start_t( " << start_t << " ) = " << end_t - start_t << std::endl;
    20. s++;
    21. }
    22. }

    输出

    转换 std::time_t 到系统时钟时间点

    std::chrono::system_clock::from_time_t
    1. static std::chrono::system_clock::time_point
    2. from_time_t( std::time_t t ) noexcept; (C++11 起)

    用二个类型间的较低精度,转换 t 为时间点类型。

    time_point 拥有较低精度,则舍入还是截断值是实现定义的。

    参数

    t-要转换的 std::time_t 值

    返回值

    表示 t 的 std::chrono::system_clock::time_point 类型值。

    调用示例

    1. #include <iostream>
    2. #include <vector>
    3. #include <chrono>
    4. #include <thread>
    5. int main()
    6. {
    7. int s = 1;
    8. // 记录开始时间
    9. // auto start = std::chrono::system_clock::now();
    10. std::chrono::system_clock::time_point start = std::chrono::system_clock::now();
    11. std::time_t start_t = std::chrono::system_clock::to_time_t(start);
    12. for (auto size = 1ull; size < 1000000000ull; size *= 100)
    13. {
    14. // 记录结束时间
    15. auto end = std::chrono::system_clock::from_time_t(start_t + s);
    16. std::chrono::duration<double> diff = end - start;
    17. std::cout << "Time to fill "
    18. << size << " ints : " << diff.count() << " s\n";
    19. s++;
    20. }
    21. }

    输出

  • 相关阅读:
    目标检测YOLO实战应用案例100讲-基于改进YOLO算法的加油站监控场景目标检测
    新手教学系列——高效管理MongoDB数据:批量插入与更新的实战技巧
    CHAPTER 9: DESIGN A WEB CRAWLER
    商品换购小程序
    [附源码]Python计算机毕业设计高校国防教育管理系统
    面向面试的机器学习知识点(5)——无监督学习
    Redis的持久化详解
    ViewBinding与Kotlin委托结合使用,去除setContentView,其实现原理解析
    Django初窥门径-自定义附件存储模型
    Linux基础 常见问题-模拟输入事件工具xdotool
  • 原文地址:https://blog.csdn.net/qq_40788199/article/details/126813753