C++ chrono与时间编程全攻略:从std::chrono到C++20日历

想使用dify实现docx文档的自动生成?试了一圈,感觉还是根据python-docx更靠谱 在软件开发过程中,需求文档、设计文档等材料的编写是每个开发者都绕不开的工作。最近笔者接到一个需要批量生成标准化需求文档的任务,尝试了目前热门的低代码工具Dify后,发现对于稍微复杂格式的文档生成需求(例如文本居中这么简单的需求),最终还是回归到基于python-docx库的解决方案。本文将分享两种技术路线的对比实践。 阅读详情

C++ chrono与时间编程全攻略:从std::chrono到C++20日历

本文系统讲解C++时间编程的方方面面,从基础chrono库到C++20日历与时间区扩展,配合大量实战代码和性能测试数据,助你彻底掌握C++时间编程。


一、chrono库基础

1.1 三大核心概念

C++11引入的<chrono>库基于三个核心概念:

#include <chrono>
#include <iostream>

int main() {
   
   
    // 1. duration:时间间隔
    std::chrono::seconds sec(5);
    std::chrono::milliseconds ms(500);
    std::chrono::duration<double, std::ratio<1>> five_sec(5.0);

    // 2. time_point:时间点
    auto now = std::chrono::steady_clock::now();
    std::cout << "ticks: " << now.time_since_epoch().count() << std::endl;

    // 3. clock:时钟
    // steady_clock: 单调递增,适合计时
    // system_clock: 系统时间,可调整
    // high_resolution_clock: 最高精度
    return 0;
}

1.2 duration详解

#include <chrono>
#include <iostream>
#include <ratio>

int main() {
   
   
    // 预定义duration类型
    std::chrono::hours h(1);
    std::chrono::minutes m(90);
    std::chrono::seconds s(3600);
    std::chrono::milliseconds ms(1000);
    std::chrono::microseconds us(1000);
    std::chrono::nanoseconds ns(1000);

    // 自动转换(小单位到大单位会截断)
    std::chrono::seconds s2 = std::chrono::milliseconds(2500);
    std::cout << s2.count() << " seconds" << std::endl; // 2 seconds

    // 精确转换
    auto result = std::chrono::duration_cast<std::chrono::milliseconds>(s2);
    std::cout << result.count() << " ms" << std::endl; // 2000 ms

    // 自定义duration
    using half_seconds = std::chrono::duration<int, std::ratio<1, 2>>;
    half_seconds hs(10); // 10 * 0.5 = 5 seconds
    auto conv = std::chrono::duration_cast<std::chrono::seconds>(hs);
    std::cout << conv.count() << " seconds" << std::endl; // 5 seconds

    // 算术运算
    auto total = h + m + s;
    std::cout << std::chrono::duration_cast<std::chrono::seconds>(total).count()
              << " seconds" << std::endl; // 5400 seconds
    return 0;
}

1.3 三种时钟对比

时钟类型 特点 用途
steady_clock 单调递增,不可调整 性能计时、超时检测
system_clock 系统实时时钟,可被修改 日志时间戳、显示时间
high_resolution_clock 平台最高精度 高精度性能测试
#include <chrono>
#include <iostream>

int main() {
   
   
    // steady_clock:推荐用于性能测试
    auto start = std::chrono::steady_clock::now();
    // ... 被测代码 ...
    volatile int sum = 0;
    for (int i = 0; i < 1000000; ++i) sum += i;
    auto end = std::chrono::steady_clock::now();

    auto elapsed = std::chrono::duration_cast<std::chrono::microseconds>(end - start
精雕软件(JDpaint) 5.5 绿色版 精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版 立即下载

相关推荐

粒子滤波在基于误差状态量的INS/GNSS组合导航中的使用技巧-On Particle Filter based Error-State INS/GNSS Intergrated Navigation

本文面向以15维惯导(INS)误差为状态量,3维位置误差为量测量的INS/GNSS组合导航系统,​在西工大严恭敏老师的开源工具箱中PF相关库函数基础上实现基于粒子滤波(PF)的惯导误差状态量的递推估计,设计了粒子重置环节并强调了其在本特定场景下的重要性。

I33D33I的博客 1742

细说STM32单片机SPI-Flash芯片的FatFS移植及其应用实例详解

本文以开发板上的SPI-Flash芯片W25Q16为媒介详细介绍CubeMX中FatFS各个参数的意义和设置,分析生成的代码中FatFS各个文件的作用和关联,完成针对W25Q16的硬件访问层的移植。继续使用旺宝红龙开发板STM32F407ZGT6 KITV1.0。

wenchm的博客 1640

弱小目标检测跟踪算法研究(5) 基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制

基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制1. 前言2. 顶帽变换(Top_hat)算法3. Matlab仿真4. 小结 1. 前言 红外图像中的弱小目标,目标属性包涵“弱"和“小’’两个方面:“弱’’是指目标在红外波长上所表现出来的强度,具体反映到所拍摄的红外图像上,就是指目标的灰度值;而“小’’是指目标的尺寸大小,也就是前面所述的成像面积很小,反映到红外图像上就是指目标所占的像素数目很少。 SPIE国际光学工程学会(Societyof Photo一0ptical Instrument

sinat_34897952的博客 5293

用 CDS View I_APARToleranceGroup 管理客户与供应商收付差异容差:配置语义、字段解读与 ABAP 落地实践

财务共享服务中心常面临小额差异处理的挑战,SAP通过"客户/供应商容差组"机制实现自动清账规则配置。CDS视图I_APARToleranceGroup将配置数据转化为可查询维度,包含宽限天数、固定现金折扣等关键业务参数。该视图支持按公司代码和容差组查询差异处理策略,可用于报表开发、主数据校验和接口合规检查,帮助财务团队高效管理海量小额交易差异,减少手工操作。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 127

C#上位机面试必问30题:机器视觉+工业通信+性能优化(含答案解析)

工业通信:围绕“稳定性”展开,重点答异常处理、断线重连、资源释放;机器视觉:围绕“精度+速度”展开,重点答预处理、ROI、参数优化;性能优化:围绕“UI不卡、内存不泄、效率不低”展开,重点答异步、限流、资源复用;面试加分项:结合实际项目案例(如“我在XX项目中用信号量解决了多设备并发卡顿问题”)。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1509

Python 爬虫项目:爬取百度贴吧帖子,保存标题与评论内容

在 Python 爬虫技术的学习与实战体系中,贴吧类动态内容爬取是典型的入门进阶案例,百度贴吧作为国内主流的社区论坛平台,其页面结构规范、数据载体清晰,非常适合用于巩固爬虫核心技术栈。本次实战项目基于requests请求库与解析库实现完整的爬取流程,从网页请求、数据解析、内容提取到本地持久化存储全链路落地,既能掌握基础爬虫的核心逻辑,也能理解网页结构化数据解析的通用思路,同时规避爬虫常见的反爬基础策略,具备极高的实战参考价值。本文核心价值。

2503_91057718的博客 2543

Pytorch实现EdgeCNN(基于PyTorch实现)

本专栏整理了《图神经网络代码实战》,内包含了不同图神经网络的相关代码实现(PyG以及自实现),理论与实践相结合,如GCN、GAT、GraphSAGE等经典图网络,每一个代码实例都附带有完整的代码。

优快云 精品推荐 1万+

Linux系统故障排查思路实践教程(上)

本文主要介绍了Linux系统日志分析与常见故障排查的实用方法。首先从系统日志的分类及其涉及的日志文件进行说明;其次详细讲解了忘记用户密码的解决方案;接着对系统无法启动问题,提供了异常断电后修复文件系统、/etc/fstab文件丢失恢复等常见故障的处理方案。最后介绍了文件系统只读错误的排查思路和修复方法,包括磁盘空间检查、文件系统修复等实用技巧。全文提供了大量具体命令和操作流程,为Linux系统维护人员提供了实用的故障处理指南。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 329

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: C++文件系统库(std::filesystem)实战指南:跨平台文件操作全攻略
下一篇: C++ string_view全攻略:零拷贝字符串的高效处理
SHIXINGYA
博客等级 码龄17年 35粉丝 192原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值