当前位置: 首页 > news >正文

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:18string类型
1686297678int64类型(秒级,10位)
1686297678549int64类型(毫秒级,13位)
1686297678549829int64类型(微妙级,16位)
1686297678549829794int64类型(纳秒级,19位)

时间类型的转换

转换类型转换类型
time_point -> stringtime_point -> int64
string -> time_pointstring -> int64
int64 -> stringint64 -> 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;
}
http://www.lryc.cn/news/92502.html

相关文章:

  • ieda codeformatV2.xml
  • Hbase
  • [golang 微服务] 5. 微服务服务发现介绍,安装以及consul的使用,Consul集群
  • 【数据结构】哈希应用
  • 【 Python 全栈开发 - WEB开发篇 - 31 】where条件查询
  • Android系统的Ashmem匿名共享内存子系统分析(5)- 实现共享的原理
  • 谈一谈冷门的C语言爬虫
  • 基于状态的维护(CBM)如何推动设备效率提高?
  • DC LAB8SDC约束四种时序路径分析
  • 学生考试作弊检测系统 yolov8
  • 【基于容器的部署、扩展和管理】 3.2 基于容器的应用程序部署和升级
  • Jmeter 实现 grpc服务 压测
  • 深入源码分析RecyclerView缓存复用原理
  • 内网隧道代理技术(一)之内网隧道代理概述
  • 设计图形用户界面的原则
  • 1:操作系统导论
  • 什么是微软的 Application Framework?
  • 一个关于宏定义的问题,我和ChatGPT、NewBing、Google Bard、文心一言 居然全军覆没?
  • 【服务器数据恢复】断电导致RAID无法找到存储设备的数据恢复案例
  • Windows上不可或缺的5款宝藏软件,工作效率拉满!
  • 链表内指定区间反转
  • Vue中如何进行地图展示与交互(如百度地图、高德地图)?
  • uni-app组件概述
  • 什么是防火墙?它有什么作用?
  • 基础工程(cubeide串口调试,printf实现,延时函数)
  • 大厂设计师都在用的9个灵感工具
  • 安全实现SpringBoot配置文件自动加解密
  • 数据结构--队列2--双端队列--java双端队列
  • 网络安全:信息收集专总结【社会工程学】
  • Linux 命令总结