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

C/C++中获取或处理时间节点方法

在C/C++中,除了gettimeofday()用于获取时间差外,还有多个函数可以获取或处理时间节点。以下是常用的时间节点相关函数及其功能概述:


1. 基础时间获取函数

time()
  • 功能:返回自1970-01-01 00:00:00 UTC(Epoch)至今的秒数(time_t类型)。
  • 用途:获取当前时间的秒级时间戳。
  • 示例
    time_t now = time(NULL);  // 获取当前时间戳
    printf("Seconds since Epoch: %ld\n", now);
    
clock()
  • 功能:返回程序启动至今的CPU时钟周期数(clock_t类型),可通过CLOCKS_PER_SEC转换为秒。
  • 用途:测量代码段的CPU耗时(不包括休眠时间)。
  • 示例
    clock_t start = clock();
    // 执行代码...
    clock_t end = clock();
    double cpu_time = (double)(end - start) / CLOCKS_PER_SEC;
    

2. 高精度时间函数

clock_gettime()
  • 功能:获取纳秒级时间戳,支持多种时钟类型(如CLOCK_REALTIMECLOCK_MONOTONIC)。
  • 用途:需要高精度时间测量的场景(如性能分析)。
  • 示例
    struct timespec ts;
    clock_gettime(CLOCK_REALTIME, &ts);
    printf("Seconds: %ld, Nanoseconds: %ld\n", ts.tv_sec, ts.tv_nsec);
    
gettimeofday()
  • 功能:获取微秒级时间戳(struct timeval),包含秒和微秒字段。
  • 用途:精确到微秒的时间差计算(如网络延迟测量)。
  • 示例
    struct timeval tv;
    gettimeofday(&tv, NULL);
    printf("Seconds: %ld, Microseconds: %ld\n", tv.tv_sec, tv.tv_usec);
    

3. 时间格式化与转换函数

localtime() / localtime_r()
  • 功能:将time_t转换为本地时间的struct tm结构体(包含年、月、日等字段)。
  • 用途:显示人类可读的日期时间。
  • 示例
    time_t t = time(NULL);
    struct tm *tm_info = localtime(&t);
    printf("Date: %04d-%02d-%02d\n", tm_info->tm_year + 1900, tm_info->tm_mon + 1, tm_info->tm_mday);
    
strftime()
  • 功能:将struct tm格式化为自定义字符串(如"2025-04-17 14:30:00")。
  • 用途:灵活的时间显示格式。
  • 示例
    char buffer[80];
    strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", tm_info);
    printf("Formatted time: %s\n", buffer);
    

4. 时间差计算函数

difftime()
  • 功能:计算两个time_t类型的时间差(返回秒数,double类型)。
  • 用途:简单的时间间隔测量。
  • 示例
    time_t start, end;
    time(&start);
    // 执行代码...
    time(&end);
    double diff = difftime(end, start);
    printf("Elapsed time: %.2f seconds\n", diff);
    

5. C++11及更高版本的替代方案

<chrono>
  • 功能:提供高精度时间点(std::chrono::system_clock::now())和时间间隔计算。
  • 用途:C++中更现代的时间处理方式。
  • 示例
    auto start = std::chrono::high_resolution_clock::now();
    // 执行代码...
    auto end = std::chrono::high_resolution_clock::now();
    auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
    std::cout << "Elapsed time: " << duration.count() << "ms\n";
    

总结

函数/库精度主要用途适用场景
time()秒级获取当前时间戳简单时间记录
clock()CPU周期测量CPU耗时性能分析(不含I/O等待)
gettimeofday()微秒级高精度时间差网络延迟、实时系统
clock_gettime()纳秒级超高精度测量科学计算、嵌入式系统
<chrono>纳秒级C++现代时间处理C++11及以上项目

如果需要更详细的时间处理(如时区转换、日历操作),可结合mktime()或第三方库(如Boost.DateTime)。

相关文章:

  • UWP特性分析
  • 软件招标评审模板
  • OpenCV day6
  • 责任链模式:从 Sentinel 流控到审批流程的链式处理
  • 什么是Netty
  • 常见免杀框架的使用(3款)---【AniYaGUI1.2.0、AV_Evasion_Tool掩日、FoxBypass_V1.0】
  • IHC肿瘤标志物 | 常见前列腺癌诊断
  • RAG-分块策略
  • 项目实战--新闻分类
  • 如何从EndNote中将某一篇手稿里面涉及到的引用文献导出,导出格式为bib?
  • 北京SMT贴片厂精密制造关键工艺
  • ESP-IDF教程2 GPIO - 输入、输出和中断
  • 【C++】 —— 笔试刷题day_19
  • STM32 HAL 通用定时器延时函数
  • 观察者 ➜ 事件总线:一路走来的碎碎念
  • 贪心、动态规划、其它算法基本原理和步骤
  • 00.IDEA 插件推荐清单(2025)
  • fastdds:传输层SHM和DATA-SHARING的区别
  • java输出HelloWorld
  • C语言动规学习
  • 特朗普激发加拿大爱国热情:大选提前投票人数创纪录,魁北克分离情绪被冲淡
  • 快评|对华关税或“大幅下降”,市场压力之下特朗普“急于与中国达成协议”
  • 对话|四代中国缘的麦肯锡前高管:在混乱中制定规则,而不是复制旧秩序
  • 新质观察|解构低空经济产业集群发展战略
  • 海南医科大学继续开展部门正职竞聘上岗,致力营造“谁有本事谁来”
  • 长三角主流媒体将走进“来电”宜昌,探寻高质量发展密码