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提示“无法找到存储设备”。管理员…...
基于Vue的沧交食堂食品监管系统[vue]-计算机毕业设计源码+LW文档
摘要:本文阐述了一个基于Vue框架开发的沧交食堂食品监管系统。该系统旨在借助现代Web技术,强化对沧交食堂食品安全的监管力度,提升监管效率与质量。系统涵盖了系统用户管理、新闻数据管理、食品相关业务管理以及评论管理等多方面功能。文章详…...
AutoDock Vina特殊金属元素对接技术指南:从问题诊断到方案落地
AutoDock Vina特殊金属元素对接技术指南:从问题诊断到方案落地 【免费下载链接】AutoDock-Vina AutoDock Vina 项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina 问题溯源:金属元素对接的技术瓶颈 在分子对接实践中,科研人…...
DataGuard运维避坑指南:当备库遇到ORA-01578坏块时的完整恢复流程
DataGuard运维实战:备库ORA-01578坏块诊断与FROM SERVICE精准修复 凌晨三点,当告警短信突然亮起"ORA-01578: ORACLE data block corrupted"的红色提示时,作为DBA的你很清楚这意味着什么——这不仅是简单的坏块问题,更是…...
【FastAPI 2.0流式AI响应核心机密】:3大异步协程调度陷阱、2处EventSource底层劫持点、1个未公开的StreamingResponse状态机设计缺陷
第一章:FastAPI 2.0流式AI响应的架构演进与设计哲学FastAPI 2.0 将流式响应能力从实验性支持提升为核心原语,其底层重构了 Starlette 的响应生命周期与事件循环集成机制,使 Server-Sent Events(SSE)、text/event-strea…...
ncmdumpGUI:突破网易云音乐NCM格式限制的高效解决方案
ncmdumpGUI:突破网易云音乐NCM格式限制的高效解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI ncmdumpGUI是一款开源的音频格式转换工具&am…...
OpenClaw轻量化实践:nanobot镜像在树莓派上的部署指南
OpenClaw轻量化实践:nanobot镜像在树莓派上的部署指南 1. 为什么选择树莓派部署OpenClaw 去年夏天,我在整理家庭实验室时翻出了一台闲置的树莓派4B。这台曾经用来跑Home Assistant的小设备,现在有了新的使命——成为我的个人AI助手。当时市…...
Mojo调用Python模块性能翻倍?深度剖析混合编程内存管理、GIL绕过与ABI兼容性(附实测基准数据)
第一章:Mojo与Python混合编程案例源码分析Mojo 作为兼具 Python 兼容性与系统级性能的新一代编程语言,其与 Python 的混合编程能力是实际工程落地的关键。以下通过一个典型场景——在 Python 主程序中调用 Mojo 实现的高性能向量加法函数——展开源码级剖…...
Nimbus:一个统一的具身合成数据生成框架
Zeyu He, Yuchang Zhang, Yuanzhen Zhou, Miao Tao, Hengjie Li,∗, Hui Wang, Yang Tian, Jia Zeng, Tai Wang, Wenzhe Cai, Yilun Chen, Ning Gao, Jiangmiao Pang摘要扩大数据规模和多样性对于泛化具身智能至关重要。虽然合成数据生成为昂贵的物理数据采集提供了可扩展的替代…...
Petalinux-build --sdk卡在assimp?手动下载源码并集成到Yocto构建系统的完整指南
解决Petalinux构建SDK时assimp源码下载失败的深度实践指南 当你在Ubuntu 18.04环境下使用Vivado 2021.2进行Petalinux开发时,执行petalinux-build --sdk命令可能会意外卡在assimp组件上。这种问题通常源于网络连接不稳定导致构建系统无法自动下载第三方依赖库。本文…...
如何用ChatALL实现AI智能协同:一次提问,多模型对比的解决方案
如何用ChatALL实现AI智能协同:一次提问,多模型对比的解决方案 【免费下载链接】ChatALL Concurrently chat with ChatGPT, Bing Chat, Bard, Alpaca, Vicuna, Claude, ChatGLM, MOSS, 讯飞星火, 文心一言 and more, discover the best answers 项目地…...
