定义于头文件 <chrono>

std::chrono

chrono 库定义三种主要类型以及工具函数和常用 typedef 。

  • 时钟
  • 时长
  • 时间点

来自系统范畴实时时钟的挂钟时间

std::chrono::system_clock
class system_clock;                  (C++11 起) 

std::chrono::system_clock 表示系统范围的实时壁钟。

它可以不单调:大多数系统上,系统时间可以在任何时候被调节。它是唯一有能力映射其时间点到 C 风格时间,从而能显示 (C++20 前)的 C++ 时钟。

std::chrono::system_clock 满足平凡时钟 (TrivialClock) 的要求。

成员类型

成员类型 定义
rep 表示时钟时长中计次数的有符号算术类型
period 表示时钟计次周期的 std::ratio 类型,单位为秒
duration std::chrono::duration<rep, period> ,足以表示负时长
time_point std::chrono::time_point<std::chrono::system_clock>

成员常量

constexpr bool is_steady

[静态]

若时间间隔计次始终为常数,即纵使在调整了外部时钟的情况下,调用 now() 的返回值亦单调递增,则为 true ;否则为 false

返回表示时间中当前点的 std::chrono::time_point

std::chrono::system_clock::now
static std::chrono::time_point<std::chrono::system_clock>
now() noexcept;  (C++11 起) 

返回表示当前时间的时间点。

参数

(无)

返回值

表示当前时间的时间点。

调用示例

#include <iostream>
#include <vector>
#include <numeric>
#include <chrono>volatile int sink;
int main()
{for (auto size = 1ull; size < 1000000000ull; size *= 100){// 记录开始时间
//        auto start = std::chrono::system_clock::now();std::chrono::system_clock::time_point start = std::chrono::system_clock::now();// 做一些工作std::vector<int> v(size, 100);sink = std::accumulate(v.begin(), v.end(), 0u); // 确保其副效应// 记录结束时间auto end = std::chrono::system_clock::now();std::chrono::duration<double> diff = end - start;std::cout << "Time to fill and iterate a vector of "<< size << " ints : " << diff.count() << " s\n";}
}

输出

转换系统时钟时间点为 std::time_t

std::chrono::system_clock::to_time_t
static std::time_t to_time_t
( const time_point& t ) noexcept;  (C++11 起) 

转换 t 为 std::time_t 类型。

若 std::time_t 拥有较低精度,则是舍入还是截断值是实现定义的。

参数

t - 要转换的系统时钟时间点

返回值

表示 t 的 std::time_t 值。

调用示例

#include <iostream>
#include <vector>
#include <chrono>
#include<thread>int main()
{int s = 1;for (auto size = 1ull; size < 1000000000ull; size *= 100){// 记录开始时间
//        auto start = std::chrono::system_clock::now();std::chrono::system_clock::time_point start = std::chrono::system_clock::now();// 做一些工作std::this_thread::sleep_for(std::chrono::seconds(s));// 记录结束时间auto end = std::chrono::system_clock::now();std::time_t start_t = std::chrono::system_clock::to_time_t(start);std::time_t end_t = std::chrono::system_clock::to_time_t(end);std::cout << "end_t( " << end_t << " ) -  start_t( " << start_t << " ) = " << end_t - start_t << std::endl;s++;}
}

输出

转换 std::time_t 到系统时钟时间点

std::chrono::system_clock::from_time_t
static std::chrono::system_clock::time_point
from_time_t( std::time_t t ) noexcept; (C++11 起) 

用二个类型间的较低精度,转换 t 为时间点类型。

time_point 拥有较低精度,则舍入还是截断值是实现定义的。

参数

t - 要转换的 std::time_t 值

返回值

表示 t 的 std::chrono::system_clock::time_point 类型值。

调用示例

#include <iostream>
#include <vector>
#include <chrono>
#include <thread>int main()
{int s = 1;// 记录开始时间
//        auto start = std::chrono::system_clock::now();std::chrono::system_clock::time_point start = std::chrono::system_clock::now();std::time_t start_t = std::chrono::system_clock::to_time_t(start);for (auto size = 1ull; size < 1000000000ull; size *= 100){// 记录结束时间auto end = std::chrono::system_clock::from_time_t(start_t + s);std::chrono::duration<double> diff = end - start;std::cout << "Time to fill "<< size << " ints : " << diff.count() << " s\n";s++;}
}

输出

c++11日期和时间工具-(std::chrono::system_clock)相关推荐

  1. C++11中的时间库std::chrono(引发关于时间的思考)

    文章目录 前言 chrono 的概况 chrono 的核心内容 duration clock system_clock steady_clock time point 关于时间的思考 时间函数思考 总 ...

  2. c++11日期和时间库:chrono

    std::chrono 主要包含两部分,std::chrono::duration 和 std::chrono::time_point,它们都是类模板,std::chrono::duration 表示 ...

  3. 弄清std::chrono::system_clock::time_point,自定义时间工具类

    time_t 是32位的整数,用来存放格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,不能表示毫秒,约能表示135年 time ...

  4. C++11新特性,利用std::chrono精简传统获取系统时间的方法

    一.传统的获取系统时间的方法 传统的C++获取时间的方法须要分平台来定义. 相信百度代码也不少. 我自己写了下,例如以下. const std::string getCurrentSystemTime ...

  5. (笔记)处理日期和时间的方法(chrono 库,time_t等)

    文章目录 0 摘要 1 chrono 库 1.1 时间间隔duration 1.2 时间点time point 1.3 时钟clocks 1.3.1 system_clock 1.3.2 steady ...

  6. Java8 ,LocalDate,LocalDateTime处理日期和时间工具类,

    Java8 ,LocalDate,LocalDateTime处理日期和时间工具类 日期格式化 1.获取今天的日期 2.在Java 8 中获取年.月.日信息 3.在Java 8 中处理特定日期 4.在J ...

  7. C++11 新的计时方法——std::chrono 大法好

    计时有很多用途,比如:测试某一段代码的运行时间,时间越短,则性能相对越高.计时有很多方法,我将首先给出我以前常用的一种计时方法,然后给出我认为的最佳方法(采用了C++11的标准技术). 首先给出我以前 ...

  8. C++获取当前时间 (std::chrono)

    在C++11之前要获取当前时间,大多数情况下要使用C语言的time库: #include <iostream> #include<time.h> #include <ss ...

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

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

最新文章

  1. python中的json_python中json的使用
  2. bzoj5090[lydsy11月赛]组题
  3. 图谱实战 | 面向C端场景的概念图谱构成、建设与应用索引
  4. OSPF——STUB区域及完全STUB区域详解
  5. ICCV 2021 揭榜!十大方向抢先看!(Transformer/分割/Action/插帧/超分等)
  6. oracle创建表不在对应表空间,oracle创建表空间
  7. Largest Number(leetcode 179)
  8. 在 Windows Azure 虚拟机上运行 SQL Server 工作负荷的十大注意事项
  9. 20172304 《程序设计与数据结构》 第一周学习总结
  10. educoder-Hadoop开发环境搭建各关卡通关答案
  11. ubuntu 搭建 smtp 邮件服务器
  12. ASM1053E ASM1153E对比
  13. 一级倒立摆matlab仿真,一级倒立摆的Simulink仿真
  14. 编译原理:语法分析器
  15. oracle唯一索引
  16. 什么是大数据与智能数据?什么是惯性测量单元与GNSS?
  17. 有哪些对树莓派的有趣改造和扩展应用?
  18. flyme最新7基于android,终于来了,魅族开始基于Android 7.0版本的Flyme内测
  19. PLC控制技术与组态技术实训装置
  20. 【观世界】物理-事理-人理

热门文章

  1. Zookeeper安装
  2. 学习用ad绘制pcb(一)
  3. linux 自带的make 命令,详解Linux下make命令的使用
  4. python3免费下载小说案例
  5. spyder pyecharts不显示_专业显示器凭什么比家用显示器贵?优派VP2785-2K:贵是有原因的...
  6. 张小龙谈移动互联网产品[转]
  7. Python面试题(6)
  8. linux管道符查看家目录,深入学习Linux之Linux中的管道符 | 和grep,awk,cut命令
  9. 要补税好几万,想卸载个税App了!
  10. Django文档——Model中的ForeignKey,ManyToManyField与OneToOneField