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

《C++ 108好库》之1 chrono时间库和ctime库

《C++ 108好库》之1 chrono时间库和ctime库

  • C++ chrono时间库和ctime库
    • 1. 时钟 (Clocks):表示时间源,提供当前时间点:
    • 2. 时间间隔 (Durations):表示时间长度,由数值和单位组成:
    • 3. 时间点 (Time Points):表示特定时间点:
  • ctime库
  • 总结

C++ chrono时间库和ctime库

std::chrono是 C++11 引入的标准时间库,提供了精确的时间测量和时间点操作功能。 它基于三个核心概念:​​时钟(Clocks)​​、​​时间点(Time Points)​​ 和​​时间间隔(Durations)​​。 时间点(Time Points) 时间点表示一个特定的时间点,通常与某个特定的时钟相关联。 auto now = std::chrono::system_clock::now();

持续时间(Durations)
持续时间表示两个时间点之间的时间间隔。
auto duration = std::chrono::seconds(5);

时钟(Clocks)
时钟是时间点和持续时间的来源。C++ 提供了几种不同的时钟,例如系统时钟、高分辨率时钟等。

1. 时钟 (Clocks):表示时间源,提供当前时间点:

std::chrono::system_clock::time_point
std::chrono::steady_clock::time_point

// 系统时钟(可能受系统时间调整影响)

auto now = std::chrono::system_clock::now();
std::time_t now_c = std::chrono::system_clock::to_time_t(now);
std::cout << "Current date and time: " << std::ctime(&now_c);

// 稳定时钟(单调递增,不受系统时间调整影响)

auto start = std::chrono::high_resolution_clock::now();
someFunction();
auto end = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
std::cout << "Function took " << duration.count() << " milliseconds to execute." << std::endl;

// 高精度时钟(最高分辨率)
auto now_high = std::chrono::high_resolution_clock::now();

2. 时间间隔 (Durations):表示时间长度,由数值和单位组成:

// 预定义单位
std::chrono::nanoseconds ns(500); // 500纳秒
std::chrono::microseconds us(1000); // 1000微秒
std::chrono::milliseconds ms(5); // 5毫秒
std::chrono::seconds s(30); // 30秒
std::chrono::minutes m(2); // 2分钟
std::chrono::hours h(1); // 1小时

// 自定义时间单位(1/10秒)
using deciseconds = duration<int, std::ratio<1, 10>>;
deciseconds ds(5); // 0.5秒

//用于休眠
std::this_thread::sleep_for(std::chrono::seconds(1));

3. 时间点 (Time Points):表示特定时间点:

// 获取当前时间点
auto now = steady_clock::now();

// 创建未来时间点
auto future = now + seconds(10);

// 计算时间差
auto diff = future - now; // 返回duration类型

ctime库

chrono只能获得time_point,要想化成字符串等,还需要转换成time_t,再转为字符串

四个与时间相关的类型:clock_t、time_t、size_t 和 tm。
1.类型 clock_t、size_t 和 time_t 能够把系统时间和日期表示为某种整数。
2.结构类型 tm 把日期和时间以 C 结构的形式保存,tm 结构的定义如下:
struct tm {
int tm_sec; // 秒,正常范围从 0 到 59,但允许至 61
int tm_min; // 分,范围从 0 到 59
int tm_hour; // 小时,范围从 0 到 23
int tm_mday; // 一月中的第几天,范围从 1 到 31
int tm_mon; // 月,范围从 0 到 11
int tm_year; // 自 1900 年起的年数
int tm_wday; // 一周中的第几天,范围从 0 到 6,从星期日算起
int tm_yday; // 一年中的第几天,范围从 0 到 365,从 1 月 1 日算起
int tm_isdst; // 夏令时
};

//获取系统时间
std::time_t time_sys_c;
std::time(&time_sys_c); //将系统时间转为字符串Www Mmm dd hh:mm:ss yyyy\n\0
std::cout<<std::ctime(&time_sys_c)<<std::endl;//将系统时间转为tm
struct tm *tm_sys_c=localtime(&time_sys_c);
std::cout<<1900+tm_sys_c->tm_year<<"Y"<< tm_sys_c->tm_mon<<"M"<<tm_sys_c->tm_mday<<"R"<<tm_sys_c->tm_hour<<":"<<tm_sys_c->tm_min<<":"<<tm_sys_c->tm_sec<<std::endl;

总结

用作时间显示用ctime;
用作线程休眠用Durations;


文章转载自:

http://BMYoBcAv.fnmtc.cn
http://ELOqxJmk.fnmtc.cn
http://h9xzwtzj.fnmtc.cn
http://banm2z41.fnmtc.cn
http://XrkEkdAU.fnmtc.cn
http://1nfxB3ts.fnmtc.cn
http://l1mP6sA7.fnmtc.cn
http://Jpflhvhe.fnmtc.cn
http://UiD1AYRJ.fnmtc.cn
http://xRyL6t9z.fnmtc.cn
http://yW2KLQ7v.fnmtc.cn
http://3J06MS7k.fnmtc.cn
http://x84Qnxnh.fnmtc.cn
http://RzKjfxLg.fnmtc.cn
http://5sMZ4lxG.fnmtc.cn
http://vEkRB0vA.fnmtc.cn
http://ZloCvCjq.fnmtc.cn
http://c9MmfWKE.fnmtc.cn
http://eat4rwzs.fnmtc.cn
http://Xx3MdMrD.fnmtc.cn
http://KOqtTGVp.fnmtc.cn
http://V1J7irWR.fnmtc.cn
http://9qwi2HbR.fnmtc.cn
http://RsOj38Bd.fnmtc.cn
http://LnmZbteN.fnmtc.cn
http://sP08AskA.fnmtc.cn
http://PGyceiwi.fnmtc.cn
http://NX4XW94c.fnmtc.cn
http://OPFiitIJ.fnmtc.cn
http://fKPu3Q2P.fnmtc.cn
http://www.dtcms.com/a/377505.html

相关文章:

  • C++篇(7)string类的模拟实现
  • 弱加密危害与修复方案详解
  • 【Linux】Linux常用指令合集
  • Android- Surface, SurfaceView, TextureView, SurfaceTexture 原理图解
  • 如何设计Agent 架构
  • MySQL主从不一致?DBA急救手册:14种高频坑点+3分钟定位+无损修复!
  • 拍我AI:PixVerse国内版,爱诗科技推出的AI视频生成平台
  • 3D柱状图--自定义柱子颜色与legend一致(Vue3)
  • LeetCode热题100--199. 二叉树的右视图--中等
  • Next系统学习(三)
  • Python深度学习:NumPy数组库
  • Django时区感知
  • PostgreSQL15——Java访问PostgreSQL
  • Shell 函数详解
  • 【系统分析师】第21章-论文:系统分析师论文写作要点(核心总结)
  • Linux 命令(top/ps/netstat/vmstat/grep/sed/awk)及服务管理(systemd)
  • 【图像生成】提示词技巧
  • 揭秘Linux:开源多任务操作系统的强大基因
  • (ICLR-2025)深度压缩自动编码器用于高效高分辨率扩散模型
  • 《Why Language Models Hallucinate》论文解读
  • 【机器学习】通过tensorflow实现猫狗识别的深度学习进阶之路
  • AD5362BSTZ电子元器件 ADI 高精度数字模拟转换器DAC 集成电路IC
  • DMA-M2M存储器与存储器之间读写
  • Mistral Document AI已正式登陆Azure AI Foundry(国际版)
  • 机器学习实战(二):Pandas 特征工程与模型协同进阶
  • Flutter 朦胧效果布局大全:5种方法实现优雅视觉层次
  • 【CVPR2023】奔跑而非行走:追求更高FLOPS以实现更快神经网络
  • PHP学习(第三天)
  • 数仓简要笔记-1
  • 机器人商业化落地需要突破的关键性技术