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 模块提供了以简单和复杂的方式操作日期和时间的类.虽然支持日期和时间算法,但实现的重点是有效的成员提取以进行输出格式化和操作.该模块还支持可感知时区的 ...
随机推荐
- 如何根据fasta快速统计基因组大小及其各染色体长度?
基因组长度 利用seqkit统计长度 seqkit stat test.fa 结果如下: file format type num_seqs sum_len min_len avg_len max_l ...
- 解决UE4项目编辑器启动时出现LogLinker: Warning: Failed to load '/Game/FirstPersonBP/FirstPersonOverview': Can't find file.
UE4版本:4.24.3源码编译版本 Windows10 + VS2019环境 LogLinker: Warning: Failed to load '/Game/FirstPersonBP/Firs ...
- 巩固javaweb的第二十七天
巩固内容 正则表达式: 5. 指定字符串的开始和结尾 正则表达式中字符串的开始和结束符如表 2.6 所示. 表 2.6 开 始 和 结 尾 字符 作 用 ^ 指定以某个字符串开始 $ 指定以某个字符串 ...
- HDFS02 HDFS的Shell操作
HDFS的Shell操作(开发重点) 目录 HDFS的Shell操作(开发重点) 基本语法 常用命令 准备工作 上传 -moveFromLocal 剪切 -copyFromLocal 拷贝 -put ...
- 浅谈MySQL数据库面试必要掌握知识点
概述 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 MySQL官方地址 https://www.mysql.com/ MySQL 8系列最新版本为8.0.27,5系列的最 ...
- pyqt5的下拉菜单,可以进行输入文字
- oracle 根据ids转names
WITH t AS (SELECT '1,2,3,4' a, 1 b FROM Dual UNION ALL SELECT '1,2,3' a, 2 b FROM Dual),p AS ( ...
- Use of explicit keyword in C++
Predict the output of following C++ program. 1 #include <iostream> 2 3 using namespace std; 4 ...
- shell脚本实现openss自建CA和证书申请
#!/bin/bash # #******************************************************************** #Author: Ma Xue ...
- my42_Mysql基于ROW格式的主从同步
模拟主从update事务,从库跳过部分update事务后,再次开始同步的现象 主库 mysql> select * from dbamngdb.isNodeOK; +----+--------- ...