本文主要介绍 std::chrono日期和时间用法。 演示环境: vs2017

0、头文件

1 #include <chrono>
2 #include <thread>// 如果需要使用线程

1、duration

  其表示一段时间,可以是这段时间单位可以是秒、分钟、小时、微秒,可以在 这里  看到详情(突然抽风,上不去了),无法贴出相关定义源码了。

  一个例子,线程休眠2秒:

std::this_thread::sleep_for(std::chrono::seconds(2));

  与之对应还有 nanoseconds、microseconds、milliseconds、minutes、hours。 因为看不到网页内容,凑合看下Vs2017中chrono文件中的定义吧。

1 using nanoseconds = duration<long long, nano>;
2 using microseconds = duration<long long, micro>;
3 using milliseconds = duration<long long, milli>;
4 using seconds = duration<long long>;
5 using minutes = duration<int, ratio<60>>;
6 using hours = duration<int, ratio<3600>>;

  (类)模板! 具体的定义,大家可以去 MSDN 看看或者 cppreference  看看,这里主要介绍的是用法。

  函数【std::this_thread::sleep_for】的参数需要一个std::chrono的一个时间段。 比如,定义一个时间段:

1 // 5秒
2 std::chrono::seconds second(5);
3 // 2毫秒
4 std::chrono::microseconds micro_seconds(2);

  std::chrono 类还提供了关于数值的运算,包括: +、-、-=、+=、/、*、/=、 *= 等。

  一个例子,生活中常见的是小时、分、秒,这里举例分钟和秒做运算。

 1 // 50秒
2 std::chrono::seconds second_50(50);
3 // 2mins
4 std::chrono::minutes minute_2(2);
5
6 // 用秒保存结果
7 std::chrono::seconds ret_val = minute_2 - second_50;
8
9 // 输出当前结果
10 std::cout << ret_val.count();

  这里,用 2分钟  减 50 秒, 结果为 70秒。 调用 std::chrono::count() 获取时钟周期:

  还可以将 秒 转为 其他 格式输出,比如,秒转分钟,需要函数  std::chrono::duration_cast<>() 帮忙。 用法如下:

std::cout << "ret_val = " << std::chrono::duration_cast<std::chrono::minutes>(ret_val).count();

  注意: 这里得到的是 整数。比如,这里的结果, 70秒, 转为分钟, 结果显示 1分钟。

2、time_point

  翻看 duration时,看到下面还有 time_point。 如名,其表示一个时间点,单位: 秒。 起始时间是 1970.1.1 00:00:00 。这样,咱们可以分方便的计算 自 1970.1.1 00:00:00 后的当 某个时间点与 1970.1.1 00:00:00的间隔时间了。

  其声明如下(来自Vs2017,其定义太长,有兴趣的可以了解下,这里仅给出定义):

template<class _Clock, class _Duration = typename _Clock::duration>
class time_point;

  它也是一个类模板,且需要搭配 duration和clock使用。

3、clock

  Chrono提供了两种的clock:

  A、system_clock  -  系统时间,系统时间可能被修改

  B、steady_clock - 记录时间,不会被修改。 换而言之,记录的是已经流逝的真正时间。

  通常,获取当前时间点代码:

std::chrono::steady_clock::time_point tp1 = std::chrono::steady_clock::now();

  time_point类也提供了算数运算: += 、-=

  一个例子:计算两个时间点之间的间隔

1   std::chrono::steady_clock::time_point tp1 = std::chrono::steady_clock::now();
2 // do something , 线程睡眠2秒
3 std::this_thread::sleep_for(std::chrono::seconds(2));
4 std::chrono::steady_clock::time_point tp2 = std::chrono::steady_clock::now();
5
6 std::cout << "time_interval = " << std::chrono::duration_cast<std::chrono::seconds>(tp2 - tp1).count() << "\n";

  结果:

c++11之日期和时间库的更多相关文章

  1. (原创)c++11中的日期和时间库

    c++11提供了日期时间相关的库chrono,通过chrono相关的库我们可以很方便的处理日期和时间.c++11还提供了字符串的宽窄转换功能,也提供了字符串和数字的相互转换的库.有了这些库提供的便利的 ...

  2. [Java]Java日期及时间库插件 -- Joda Time.

    来到新公司工作也有一个多月了, 陆陆续续做了一些简单的项目. 今天做一个新东西的时候发现了 Joda Time的这个东西, 因为以前用的都是JDK原生的时间处理API, 大家都知道Java原生的时间处 ...

  3. Python学习进程(11)日期和时间

        本节介绍Python应用程序处理时间和日期的方式.其中转换日期格式是最常用的功能.     (1)获取时间戳: Python 提供了一个 time 和 calendar 模块可以用于格式化日期 ...

  4. Joda Time - 强大易用的日期和时间库

    Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time.可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成. Joda-Ti ...

  5. 强大易用的日期和时间库 Joda Time

    Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time.可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成,并且它是线程安全 ...

  6. PHP - 日期与时间

    第10章 日期与时间 学习要点: 1.PHP日期和时间库 使用PHP编程时,与你遇到的大多数其他类型的数据相比,日期和时间有很大不同.因为日期和时间没有明确的结构,并且日期的计算和表示也很麻烦.在PH ...

  7. Java8的日期和时间的库20经常使用的演示样本

    除了lambda表达,stream以及从一些小的改进,Java 8还推出了新的日期和时间API,在本教程中,我们将展示通过几个简单的任务来学习如何使用示例Java 8这组API.Java至今.日历和时 ...

  8. 5.Python3标准库-日期和时间

    ''' 不同于int,str,float,Python没有包含对应日期和时间的原生类型,不过提供了3个相应的模块,可以采用多种表示来管理日期和时间值 time模块由底层C库提供与时间相关的函数.它包含 ...

  9. Python标准库:datetime 时间和日期模块 —— 时间的获取和操作详解

    datetime 时间和日期模块 datetime 模块提供了以简单和复杂的方式操作日期和时间的类.虽然支持日期和时间算法,但实现的重点是有效的成员提取以进行输出格式化和操作.该模块还支持可感知时区的 ...

随机推荐

  1. 3D-DNA 挂载染色体

    3D-DNA是一款简单,方便的处理Hi-C软件,可将contig提升到染色体水平.其githup网址:https://github.com/theaidenlab/3d-dna 3D-DNA流程简介 ...

  2. miRNA分析--靶基因预测(三)

    miRNA分析--数据过滤(一) miRNA分析--比对(二) 根据miRNA Target Prediction in Plants, miRNA并非所有区域都要求严格匹配,其中第1位碱基和第14位 ...

  3. Oracle——检查数据库是否正常运行,如果没有,并重启数据库

    1.su oracle  切换到linux的oracle账号 需要使用 su -oracle,而不是su oracle;原因是: 先执行exit退出,再重新切换 2.打开数据库监听 lsnrctl l ...

  4. dubbo 协议的 K8s pod 存活探针配置

    背景 某项目采用微服务架构,dubbo 框架,K8s 方式部署. 其中 HTTP 协议由网关应用统一处理,大部分应用仅提供 dubbo 协议. 目标 应用某个实例(pod)状态异常时,尝试自动重启恢复 ...

  5. 日常Java 2021/10/24

    Java ArrrayList ArrayList类是一个可以动态修改的数组,没有固定大小的限制,可以在任何时候添加或者删除元素 ArrayList类在java.util包中使用之前需要引用 E:泛型 ...

  6. css通配样式初始化(多款,供君自选)

    腾讯官网 body,ol,ul,h1,h2,h3,h4,h5,h6,p,th,td,dl,dd,form,fieldset,legend,input,textarea,select{margin:0; ...

  7. ssh : connect to host XXX.XXX.XXX.XXX port : 22 connect refused

    初学者 写博客 如有不对之处请多多指教 我是要在俩个主机的俩个虚拟机上 用scp (security copy)进行文件远程复制. 但是 终端 提示 ssh : connect to host XXX ...

  8. oracle 外部表查alter日志

    --创建文件夹,路径是alter日志的路径 create or replace directory data_dir as '/u01/app/oracle/diag/rdbms/orcl/orcl/ ...

  9. 关系型数据库和非关系型数据库区别、oracle与mysql的区别

    一.关系型数据库 关系型数据库,是指采用了关系模型来组织数据的数据库.    关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出的,在之后的几十年中,关系模型的概念得到了充分的发展并逐 ...

  10. new Date()与setDate()参数

    New Date()与setDate()参数 相信网上已经有很多关于日期的文章了,这里只是我自己再工作中遇到的问题然后加以总结: new Date() new Date() 一共有六种形式,五种带参数 ...