std::chrono时间处理
std::chrono是C++11引入的标准库,用于时间的计算和处理。它按照ISO8601标准定义了多个时间类,例如:duration(持续时间)、time_point(时间点)和clock(时钟)。以下是一些常见的用法:
1. 计算程序运行时间
#include <iostream>
#include <string>
#include <chrono>
#include <unistd.h>
#include <sstream>
#include <iomanip>
#include <thread>int main(int argc, char *argv[])
{  //1. 计算耗时auto start = std::chrono::system_clock::now();//std::chrono::time_point start = std::chrono::system_clock::now();int32_t j = 0;for(int i=0;i<10000;i++){j++;}        //sleep(1);std::this_thread::sleep_for(std::chrono::seconds(1));auto end = std::chrono::system_clock::now();auto diff1 = std::chrono::duration_cast<std::chrono::seconds>(end - start).count();         //秒auto diff2 = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();    //毫秒auto diff3 = std::chrono::duration_cast<std::chrono::microseconds> (end - start).count();   //微妙auto diff4 = std::chrono::duration_cast<std::chrono::nanoseconds>(end - start).count();     //纳秒//std::chrono::minutes//std::chrono::hours    std::cout<<"diff1 is: "<<diff1<<std::endl;std::cout<<"diff2 is: "<<diff2<<std::endl;std::cout<<"diff3 is: "<<diff3<<std::endl;std::cout<<"diff4 is: "<<diff4<<std::endl;return 0;
}
 
输出
diff1 is: 1
diff2 is: 1001
diff3 is: 1001608
diff4 is: 1001608504
 
2. 等待时间
线程的等待时间
std::this_thread::sleep_for(std::chrono::seconds(1));
 
3. 获取当前时间以及时间转换
获取当前时间
auto nowTime = std::chrono::system_clock::now();
std::time_t t = std::chrono::system_clock::to_time_t(nowTime);
std::cout << "nowTime is: " << std::ctime(&t) << std::endl;    
 
输出
nowTime is: Fri Jun  9 08:01:18 2023
 
时间转换
 在工作中上述的时间不是我们需要的,通常用到的时间为string和int类型:
| 类型 | 说明 | 
|---|---|
| 2023-06-09 08:01:18 | string类型 | 
| 1686297678 | int64类型(秒级,10位) | 
| 1686297678549 | int64类型(毫秒级,13位) | 
| 1686297678549829 | int64类型(微妙级,16位) | 
| 1686297678549829794 | int64类型(纳秒级,19位) | 
时间类型的转换
| 转换类型 | 转换类型 | 
|---|---|
| time_point -> string | time_point -> int64 | 
| string -> time_point | string -> int64 | 
| int64 -> string | int64 -> time_point | 
测试demo
time_conversion.hpp文件的下载地址
/** @brief: example about time format conversion by chrono* @data: 2023/06/09* @complie: g++ -g main.cc time_conversion.hpp -o d -std=c++11* @author: guokerenjian* @lastEditDate: */#include <iostream>
#include "time_conversion.hpp"using namespace t_convert;int main()
{TimeConvert tc;auto nowTime = std::chrono::system_clock::now();std::time_t t = std::chrono::system_clock::to_time_t(nowTime);std::cout << "nowTime is: " << std::ctime(&t) << std::endl;    //1.time_point -> stringstd::cout<<"time_point -> string"<<std::endl;std::string strTime;if(tc.timePointToString(nowTime, strTime)){std::cout<<"strTime is: "<<strTime<<"\n\n";}else{std::cout<<"failure"<<std::endl;}    //2.time_point -> int64std::cout<<"time_point -> int64"<<std::endl;int64_t itime{0};if(tc.timePointToInt64(nowTime, itime, TIME_TYPE::SECOND_TIME))  //秒{std::cout<<"itime is: "<<itime<<"\n";    }if(tc.timePointToInt64(nowTime, itime, TIME_TYPE::MILLISSECOND_TIME))  //毫秒{std::cout<<"itime is: "<<itime<<"\n";    }if(tc.timePointToInt64(nowTime, itime, TIME_TYPE::MICROSECOND_TIME))  //微妙{std::cout<<"itime is: "<<itime<<"\n";    }if(tc.timePointToInt64(nowTime, itime, TIME_TYPE::NANOSECOND_TIME))  //纳秒{std::cout<<"itime is: "<<itime<<"\n\n";    }    //3.string -> time_pointstd::cout<<"string -> time_point"<<std::endl;decltype(nowTime) resultTime;if(tc.stringToTimePoint(strTime, resultTime)){std::time_t t_result = std::chrono::system_clock::to_time_t(resultTime);std::cout << "resultTime is: " << std::ctime(&t_result) <<"\n\n";}    //4.string -> int64std::cout<<"string -> int64"<<std::endl;int64_t time_int{0};if(tc.stringToInt64(strTime, time_int)){std::cout<<"time_int is: "<<time_int<<"\n\n";}//5.int64 -> time_pointstd::cout<<"int64 -> time_point"<<std::endl;decltype(nowTime) resultTimeFromeInt;    int64_t time_test{0};if(tc.timePointToInt64(nowTime, time_test, TIME_TYPE::UNKOWN) && tc.Int64ToTimePoint(time_test,resultTimeFromeInt)){std::time_t t_result_int = std::chrono::system_clock::to_time_t(resultTimeFromeInt);std::cout << "t_result_int is: " << std::ctime(&t_result_int) <<"\n";}if(tc.timePointToInt64(nowTime, time_test, TIME_TYPE::MILLISSECOND_TIME) && tc.Int64ToTimePoint(time_test,resultTimeFromeInt)){std::time_t t_result_int = std::chrono::system_clock::to_time_t(resultTimeFromeInt);std::cout << "t_result_int is: " << std::ctime(&t_result_int) <<"\n";}if(tc.timePointToInt64(nowTime, time_test, TIME_TYPE::MICROSECOND_TIME) && tc.Int64ToTimePoint(time_test,resultTimeFromeInt)){std::time_t t_result_int = std::chrono::system_clock::to_time_t(resultTimeFromeInt);std::cout << "t_result_int is: " << std::ctime(&t_result_int) <<"\n";}if(tc.timePointToInt64(nowTime, time_test, TIME_TYPE::NANOSECOND_TIME) && tc.Int64ToTimePoint(time_test,resultTimeFromeInt)){std::time_t t_result_int = std::chrono::system_clock::to_time_t(resultTimeFromeInt);std::cout << "t_result_int is: " << std::ctime(&t_result_int) <<"\n\n";}//6.time_point -> stringstd::cout<<"time_point -> string"<<std::endl;std::string str_time_result;if(tc.Int64ToString(time_test, str_time_result)){std::cout<<"str_time_result is: "<<str_time_result<<std::endl;}    return 0;
}相关文章:
std::chrono时间处理
std::chrono是C11引入的标准库,用于时间的计算和处理。它按照ISO8601标准定义了多个时间类,例如:duration(持续时间)、time_point(时间点)和clock(时钟)。以下是一些常见…...
ieda codeformatV2.xml
ieda codeformatV2.xml 目录概述需求: 设计思路实现思路分析1.codeformatV22.codeformatV23.codeformatV24.codeformatV25.数据处理器 拓展实现 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&…...
Hbase
java客户端 导入maven依赖 XML<dependencies> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency>…...
[golang 微服务] 5. 微服务服务发现介绍,安装以及consul的使用,Consul集群
一.服务发现介绍 引入 上一节讲解了使用 gRPC创建微服务,客户端的一个接口可能需要调用 N个服务,而不同服务可能存在 不同的服务器,这时,客户端就必须知道所有服务的 网络位置(ipport),来进行连接服务器操作,如下图所示: 以往的做…...
【数据结构】哈希应用
目录 一、位图 1、位图概念 2、位图实现 2.1、位图结构 2.2、比特位置1 2.3、比特位置0 2.4、检测位图中比特位 3、位图例题 3.1、找到只出现一次的整数 3.2、找到两个文件交集 3.3、找到出现次数不超过2次的所有整数 二、布隆过滤器 1、布隆过滤器提出 2、布隆过…...
【 Python 全栈开发 - WEB开发篇 - 31 】where条件查询
文章目录 一、where条件查询1.关系运算符查询2.IN关键字查询3.BETWEEN AND关键字查询4.空值查询5.AND关键字查询6.OR关键字查询7.LIKE关键字查询普通字符串含有%通配的字符串含有_通配的字符串 一、where条件查询 MySQL 的 where 条件查询是指在查询数据时,通过 wh…...
Android系统的Ashmem匿名共享内存子系统分析(5)- 实现共享的原理
声明 其实对于Android系统的Ashmem匿名共享内存系统早就有分析的想法,记得2019年6、7月份Mr.Deng离职期间约定一起对其进行研究的,但因为我个人问题没能实施这个计划,留下些许遗憾…文中参考了很多书籍及博客内容,可能涉及的比较…...
谈一谈冷门的C语言爬虫
C语言可以用来编写爬虫程序,但是相对于其他编程语言,C语言的爬虫开发可能会更加复杂和繁琐。因为C语言本身并没有提供现成的爬虫框架和库,需要自己编写网络请求、HTML解析等功能。 不过,如果你对C语言比较熟悉,也可以…...
基于状态的维护(CBM)如何推动设备效率提高?
基于状态的维护(Condition-Based Maintenance,CBM)是一种先进的维护策略,通过实时监测和分析设备的状态数据,预测设备故障并采取相应的维护措施。CBM基于数据驱动的方法,能够提高设备的可用性、降低维修成本…...
DC LAB8SDC约束四种时序路径分析
DC LAB 1.启动DC2.读入设计3. 查看所有违例的约束报告3.1 report_constraint -all_violators (alias rc)3.2 view report_constraint -all_violators -verbose -significant_digits 4 (打印详细报告) 4.查看时序报告 report_timing -significant_digits 45. 约束组合逻辑(adr_i…...
学生考试作弊检测系统 yolov8
学生考试作弊检测系统采用yolov8网络模型人工智能技术,学生考试作弊检测系统过在考场中安装监控设备,对学生的作弊行为进行实时监测。当学生出现作弊行为时,学生考试作弊检测系统将自动识别并记录信息。YOLOv8 算法的核心特性和改动可以归结为…...
【基于容器的部署、扩展和管理】 3.2 基于容器的应用程序部署和升级
往期回顾: 第一章:【云原生概念和技术】 第二章:【容器化应用程序设计和开发】 第三章:【3.1 容器编排系统和Kubernetes集群的构建】 3.2 基于容器的应用程序部署和升级 3.2 基于容器的应用程序部署和升级 3.2 基于容器的应用程…...
Jmeter 实现 grpc服务 压测
一、Jmeter安装与配置 网上有很多安装与配置文章,在此不做赘述 二、Jmeter gRPC Request 插件安装 插件下载地址:JMeter Plugins :: JMeter-Plugins.org 将下载文件解压后放到Jmeter安装目录下 /lib/ext 然后在终端输入Jmeter即可打开 Jmeter GUI界面…...
深入源码分析RecyclerView缓存复用原理
文章目录 前言四级缓存 源码分析缓存一级缓存(mChangedScrap和mChangedScrap)二级缓存(mCachedViews)三级缓存(ViewCacheExtension)四级缓存(mRecyclerPool)缓存池mRecyclerPool结构…...
内网隧道代理技术(一)之内网隧道代理概述
内网隧道代理技术 内网转发 在渗透测试中,当我们获得了外网服务器(如web服务器,ftp服务器,mali服务器等等)的一定权限后发现这台服务器可以直接或者间接的访问内网。此时渗透测试进入后渗透阶段,一般情况…...
设计图形用户界面的原则
1) 一般性原则:界面要具有一致性、常用操作要有快捷方式、 提供简单的错误处理、对操作人员的重要操作要有信息反馈、操作可 逆、设计良好的联机帮助、合理划分并高效地使用显示屏、保证信息 显示方式与数据输入方式的协调一致 2) 颜色的使用:颜色…...
1:操作系统导论
1.1操作系统的定义 •Anoperatingsystemactsanintermediarybetweenuserofacomputerandthecomputer hardware. ◦ 操作系统充当计算机⽤⼾和计算机硬件之间的中介 •Thepurposeofanoperatingsystemistoprovideanenvironmentinwhichausercanexecute programsinaconvenientandeff…...
什么是微软的 Application Framework?
我是荔园微风,作为一名在IT界整整25年的老兵,今天来看一下什么是微软的 Application Framework? 到底什么是 Application Framework? 还没有真正掌握任何一套Application Framework的使用之前,就来研究这个真的不是很…...
一个关于宏定义的问题,我和ChatGPT、NewBing、Google Bard、文心一言 居然全军覆没?
文章目录 一、问题重述二、AI 解题2.1 ChatGPT2.2 NewBing2.3 Google Bard2.4 文心一言2.5 小结 一、问题重述 今天在问答模块回答了一道问题,要睡觉的时候,又去看了一眼,发现回答错了。 问题描述:下面的z的值是多少。 #define…...
【服务器数据恢复】断电导致RAID无法找到存储设备的数据恢复案例
服务器数据恢复环境: HP EVA存储,6块SAS硬盘组建的raid5磁盘阵列。上层操作系统是WINDOWS SERVER。该存储为公司内部文件服务器使用。 服务器故障&分析: 在遭遇两次意外断电后,设备重启时raid提示“无法找到存储设备”。管理员…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
