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

C++中关于时间的小结

1. 前言

c++ 处理时间主要有两种风格,c风格(<ctime>) 和 c++11 引入的 std::chrono库。

2. C语言风格的时间

2.1 核心数据结构

  • time_t 通常是 长整形,long or long long, 表示从1970年1月1日至今的总秒数
  • clock_t 用于计算程序运行占用的cpu tick数(滴答数)
  • struct tm 时间结构体(分解时间),将秒数分解为人类可读的年月日时分秒
struct tm { int tm_sec; // 秒,范围从 0 到 59 int tm_min; // 分,范围从 0 到 59 int tm_hour; // 小时,范围从 0 到 23 int tm_mday; // 一月中的第几天,范围从 1 到 31 int tm_mon; // 月份,范围从 0 到 11 (注意:0表示1月) int tm_year; // 自 1900 年起的年数 (注意:124表示2024年) int tm_wday; // 一周中的第几天,范围从 0 到 6 (0表示周日) int tm_yday; // 一年中的第几天,范围从 0 到 365 int tm_isdst; // 夏令时标识符 // POSIX 扩展 long tm_gmtoff; // 当前时区相对于 UTC 的秒数 const char *tm_zone; // 当前时区的名字,比如 "CST" };
  • struct timespec 精度为纳秒,常配合 clock_gettime 接口

struct timespec { time_t tv_sec; // 秒 (Seconds) long tv_nsec; // 纳秒 (Nanoseconds),范围 0 到 999,999,999 }; // 获取当前时间的时间戳 time_t getLocalTimeMs() { struct timespec ts = {}; if (clock_gettime(CLOCK_REALTIME, &ts) != 0) { return 0; } return (ts.tv_sec * 1000u) + ts.tv_nsec / 1000000u; }
  • struct timeval<sys/time.h>(C++ 中通常也可以通过<ctime>间接包含)核心接口是 gettimeofday(&tv, NULL), 常用于计算一段代码的耗时,网络编程 select 超时时间等。

struct timeval { time_t tv_sec; // 秒 (seconds) suseconds_t tv_usec; // 微秒 (microseconds) };

2.2 主要功能接口 (绑定struct tm结构体)

1. time(time_t* time) 获取当前系统的总秒数,unix 纪元

2. clock() 返回程序开始运行到现在的cpu 时钟计时单元数

3. localtime(const time_t time) 将总秒数转换为本地时间 struct tm 格式

4. gtime(const time_t time) 将总秒数转换为UTC(格林威治)时间的 struct tm 格式

5. mktime(struct tm * time) 反向操作,将 struct tm 结构体转换为 time_t 总秒数

6. strftime(char* str, size_t max, const char* format, const struct tm* tp) 可以通过format指定格式(如%Y-%m-%d %H:%M:%S

7. strptime(const char* buf, const char* format, struct tm* time) strftime的逆向操作,将字符串解析转换为 struct tm 结构体。

2.3 转换关系图

chrono 库

参考 https://cppreference.cn/w/cpp/chrono

http://www.jsqmd.com/news/615884/

相关文章:

  • JBoltAI:工业SOP数智化转型的得力助手
  • RP2040 PIO驱动WS2812:纳秒级时序的NeoPixel库
  • Windows安卓应用运行新方案:轻量级安卓环境搭建与实践指南
  • golang如何理解值类型和引用类型_golang值类型与引用类型区别详解
  • 2026年果汁码垛机选型指南:饮料装箱机、饮料输送线、果汁包装机、果汁装箱机、果汁输送线、热收缩膜包装机、瓶装水包装机选择指南 - 优质品牌商家
  • 广州邮科选型指南:挑选可调电源必须关注的四个核心参数
  • PbS QDs‑AuNPs,PbS量子点修饰纳米金,CdS QDs‑AuNPs,CdS量子点修饰金纳米颗粒,性状与结构特点
  • 一文学习 工作流开发 BPMN、 Flowable参
  • 遇到一个口头机遇的答辩准备6
  • 一天一个开源项目(第69篇):second-brain-skills - 把 Claude Code 变成知识工作专家的 Skill 工具集
  • Scikit-learn怎么实现协同过滤推荐_利用NearestNeighbors找相似用户
  • 招投标审查效率低、风险高?这款AI系统直接解决核心痛点
  • 【C++可变模板参数】
  • 【限时解密】某TOP3电商平台订单测试SOP文档(含23个自动化断言脚本+Postman集合+Mock规则库)
  • 2026冰雹车凹陷修复技术解析:从损伤评估到合规修复指南 - 优质品牌商家
  • 西门子1200 PLC的MODBUS_RTU轮询程序那些事儿
  • LeetCode 删除无效的括号:python 题解匆
  • 【Scala PyTorch深度学习】PyTorch On Scala系列课程 第一章 03 :张量基本操作【AI Infra 3.0】[PyTorch Scala 硕士研一课程]
  • 芯谷科技—D384X 系列电流模式PWM控制器
  • Zookeeper分布式协调
  • 智能家居中枢:OpenClaw+千问3.5-27B解析语音指令
  • Windows下OpenClaw安装指南:Qwen2.5-VL-7B图文模型一键调用
  • 支付签名验签失效,资金秒盗!PHP接口安全防护全链路拆解,从OpenSSL到HMAC-SHA256
  • 2026年SOD试剂盒市场:这些公司值得深入了解,elisa试剂盒使用说明书/白介素检测试剂盒,sod试剂盒品牌找哪家 - 品牌推荐师
  • Java应用转GraalVM静态镜像后GC停顿归零?不!真实生产数据揭示:未配置--enable-http、--enable-https导致堆外内存泄漏的致命陷阱
  • PHP微服务性能跃升47%的秘密:Swoole 5.0新特性深度适配教程(仅限首批内测开发者掌握)
  • 3小时搞定OpenClaw飞书机器人:Phi-3-mini-128k-instruct对话集成
  • OpenClaw学习路径:从Qwen3.5-9B-AWQ-4bit入门到开发复杂自动化流
  • 这本《大语言模型》直接封神,清华张亚勤盛赞“入门圣经”,A100集群训练日志全公开!
  • OpenClaw+Phi-3-vision-128k-instruct智能剪辑:视频关键帧提取与摘要生成