本文主要介绍 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. 毕业设计压力测试——jmeter

    ------------恢复内容开始------------ JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主 ...

  2. W10: Warning: Changing a readonly file使用vi/vim报错问题解决

    使用vi/vim编辑文件的时候出现W10: Warning: Changing a readonly file报错 解决方法: 一.强制保存退出 :wq! 二.ll 查询文件属主,使用属主赋予权限 c ...

  3. centos yum安装mongodb,php扩展

    一,安装mongodb,php扩展 ? 1 [root@localhost ~]# yum install php-pecl-mongo mongodb mongodb-devel mongodb-s ...

  4. kubernetes 用到的工具及组件

    kubernetes 用到的工具及组件,将所有的组件下载后放到/usr/local/bin目录下(记得chmod a+x /usr/local/bin/*).所有的组件,原则上都用最新的,如果遇到不支 ...

  5. 日常Java测试第二段 2021/11/12

    第二阶段 package word_show; import java.io.*;import java.util.*;import java.util.Map.Entry; public class ...

  6. Qt最好用评价最高的是哪个版本?

    来源: http://www.qtcn.org/bbs/read-htm-tid-89455.html /// Qt4:    4.8.7      4.X 系列终结版本 Qt5 :   5.6 LT ...

  7. Oracle中的job(定时任务)

    oracle中的job(定时任务)由dbms_job包下的函数实现.关于job的理论知识可参考https://blog.csdn.net/apextrace/article/details/77675 ...

  8. linux之wc命令详解

    Linux系统中wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式 wc [options] 文件... 2.命令功能 统计指定文件中的字 ...

  9. fastjson转换数字时,格式化小数点

    使用fastjson类库转换java对象时,对于BigDecimal类型,有时需要特殊格式,比如: 1.0,转为json时候,要求显式为1,因此需要在转换时做处理.步骤如下: 1.新建类,实现Valu ...

  10. 【分布式】Zookeeper伪集群安装部署

    zookeeper:伪集群安装部署 只有一台linux主机,但却想要模拟搭建一套zookeeper集群的环境.可以使用伪集群模式来搭建.伪集群模式本质上就是在一个linux操作系统里面启动多个zook ...