本文主要介绍 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. python-django-自定义查询Q函数和F函数

    数据库: def page_q(request): """Q函数的使用""" #查询username和nickname都是zhangsan ...

  2. Dango之form校验组件

    目录 1.引入案例 2. form组件的功能 3. form组件的使用 3.1 自定义form校验类 3.2 校验数据 3.3 渲染页面 3.4 展示错误信息 3.5 自定义校验结果 3.6 form ...

  3. 搭建zabbix服务器常见问题解析处理

    1. 找不到url 2. 服务器无法处理当前请求,PHP解析出错 3. 服务器无法处理当前请求,权限不足 1. 找不到url 浏览器报错:The requested URL /zabbix/ was ...

  4. Java日期时间操作基础——包含JDK1.8时间操作新特性

    JDK1.7日期时间操作 示例小结 public class DateTest { public static final String FORMAT_DATE = "yyyy-MM-dd& ...

  5. javaSE高级篇4 — 反射机制( 含类加载器 ) — 更新完毕

    反射机制 1.反射机制是什么?----英文单词是:reflect.在java.lang包下---这才是java最牛逼的技术 首先提前知道一句话----在java中,有了对象,于是有了类,那么有了类之后 ...

  6. Linux环境下为普通用户添加sudo权限

    系统环境:Centos6.5 1.背景: sudo是Linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部root命令的一个工具.Linux系统下,为了安全,一般来说我们操作都是在普通用户 ...

  7. alert之后才执行

    如果在正常情况下,代码要在alert之后才执行,解决办法:将要执行的代码用setTimeout延迟执行即可(原因:页面未加载完毕)

  8. Linux:while read line与for循环的区别

    while read line:是一次性将文件信息读入并赋值给变量line , while中使用重定向机制,文件中的所有信息都被读入并重定向给了整个while 语句中的line 变量. for:是每次 ...

  9. 【Spring Framework】Spring入门教程(七)Spring 事件

    内置事件 Spring中的事件是一个ApplicationEvent类的子类,由实现ApplicationEventPublisherAware接口的类发送,实现ApplicationListener ...

  10. webpack配置(vue)

    Vue-loader Vue-loader 是一个加载器,能把 .vue 文件转换为js模块. Vue Loader 的配置和其它的 loader 不太一样.除了将 vue-loader 应用到所有扩 ...