c++11之日期和时间库
本文主要介绍 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之日期和时间库的更多相关文章
- (原创)c++11中的日期和时间库
c++11提供了日期时间相关的库chrono,通过chrono相关的库我们可以很方便的处理日期和时间.c++11还提供了字符串的宽窄转换功能,也提供了字符串和数字的相互转换的库.有了这些库提供的便利的 ...
- [Java]Java日期及时间库插件 -- Joda Time.
来到新公司工作也有一个多月了, 陆陆续续做了一些简单的项目. 今天做一个新东西的时候发现了 Joda Time的这个东西, 因为以前用的都是JDK原生的时间处理API, 大家都知道Java原生的时间处 ...
- Python学习进程(11)日期和时间
本节介绍Python应用程序处理时间和日期的方式.其中转换日期格式是最常用的功能. (1)获取时间戳: Python 提供了一个 time 和 calendar 模块可以用于格式化日期 ...
- Joda Time - 强大易用的日期和时间库
Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time.可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成. Joda-Ti ...
- 强大易用的日期和时间库 Joda Time
Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time.可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成,并且它是线程安全 ...
- PHP - 日期与时间
第10章 日期与时间 学习要点: 1.PHP日期和时间库 使用PHP编程时,与你遇到的大多数其他类型的数据相比,日期和时间有很大不同.因为日期和时间没有明确的结构,并且日期的计算和表示也很麻烦.在PH ...
- Java8的日期和时间的库20经常使用的演示样本
除了lambda表达,stream以及从一些小的改进,Java 8还推出了新的日期和时间API,在本教程中,我们将展示通过几个简单的任务来学习如何使用示例Java 8这组API.Java至今.日历和时 ...
- 5.Python3标准库-日期和时间
''' 不同于int,str,float,Python没有包含对应日期和时间的原生类型,不过提供了3个相应的模块,可以采用多种表示来管理日期和时间值 time模块由底层C库提供与时间相关的函数.它包含 ...
- Python标准库:datetime 时间和日期模块 —— 时间的获取和操作详解
datetime 时间和日期模块 datetime 模块提供了以简单和复杂的方式操作日期和时间的类.虽然支持日期和时间算法,但实现的重点是有效的成员提取以进行输出格式化和操作.该模块还支持可感知时区的 ...
随机推荐
- 毕业设计压力测试——jmeter
------------恢复内容开始------------ JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主 ...
- W10: Warning: Changing a readonly file使用vi/vim报错问题解决
使用vi/vim编辑文件的时候出现W10: Warning: Changing a readonly file报错 解决方法: 一.强制保存退出 :wq! 二.ll 查询文件属主,使用属主赋予权限 c ...
- centos yum安装mongodb,php扩展
一,安装mongodb,php扩展 ? 1 [root@localhost ~]# yum install php-pecl-mongo mongodb mongodb-devel mongodb-s ...
- kubernetes 用到的工具及组件
kubernetes 用到的工具及组件,将所有的组件下载后放到/usr/local/bin目录下(记得chmod a+x /usr/local/bin/*).所有的组件,原则上都用最新的,如果遇到不支 ...
- 日常Java测试第二段 2021/11/12
第二阶段 package word_show; import java.io.*;import java.util.*;import java.util.Map.Entry; public class ...
- Qt最好用评价最高的是哪个版本?
来源: http://www.qtcn.org/bbs/read-htm-tid-89455.html /// Qt4: 4.8.7 4.X 系列终结版本 Qt5 : 5.6 LT ...
- Oracle中的job(定时任务)
oracle中的job(定时任务)由dbms_job包下的函数实现.关于job的理论知识可参考https://blog.csdn.net/apextrace/article/details/77675 ...
- linux之wc命令详解
Linux系统中wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式 wc [options] 文件... 2.命令功能 统计指定文件中的字 ...
- fastjson转换数字时,格式化小数点
使用fastjson类库转换java对象时,对于BigDecimal类型,有时需要特殊格式,比如: 1.0,转为json时候,要求显式为1,因此需要在转换时做处理.步骤如下: 1.新建类,实现Valu ...
- 【分布式】Zookeeper伪集群安装部署
zookeeper:伪集群安装部署 只有一台linux主机,但却想要模拟搭建一套zookeeper集群的环境.可以使用伪集群模式来搭建.伪集群模式本质上就是在一个linux操作系统里面启动多个zook ...