C 标准库 - <time.h>详解

简介: `<time.h>` 是 C 标准库中的头文件,提供了与时间和日期相关的功能。它包括关键数据类型如 `time_t` 和 `struct tm`,常用宏如 `CLOCKS_PER_SEC`,以及函数如 `time()`、`difftime()`、`mktime()`、`localtime()`、`gmtime()`、`strftime()`、`asctime()`、`ctime()` 和 `clock()`。

<time.h> 是 C 标准库中的一个头文件,提供了一系列与时间和日期相关的功能。以下是对 <time.h> 中常用类型、宏和函数的详细介绍。

1. 重要数据类型

  • time_t: 用于表示时间的类型,通常是一个整数,表示从某个时间点(通常是1970年1月1日00:00:00 UTC)到当前时间的秒数。

  • struct tm: 用于表示分解后的时间信息,包含以下字段:

    • tm_sec:秒(0-60)
    • tm_min:分钟(0-59)
    • tm_hour:小时(0-23)
    • tm_mday:一个月中的天(1-31)
    • tm_mon:月份(0-11)
    • tm_year:自1900年以来的年份
    • tm_wday:一周中的天(0-6,0表示星期日)
    • tm_yday:一年中的天数(0-365)
    • tm_isdst:夏令时标志

2. 常用宏

  • CLOCKS_PER_SEC: 每秒的时钟计数,通常为 1000000(即每秒有 1,000,000 个时钟滴答)。

3. 常用函数

  • time(): 返回当前的时间(自1970年1月1日以来的秒数)。

    time_t time(time_t *tloc);
    
  • difftime(): 计算两个 time_t 值之间的差(以秒为单位)。

    double difftime(time_t end, time_t beginning);
    
  • mktime(): 将 struct tm 转换为 time_t

    time_t mktime(struct tm *timeptr);
    
  • localtime(): 将 time_t 转换为 struct tm,表示当地时间。

    struct tm *localtime(const time_t *timer);
    
  • gmtime(): 将 time_t 转换为 struct tm,表示 UTC 时间。

    struct tm *gmtime(const time_t *timer);
    
  • strftime(): 格式化时间,将 struct tm 转换为字符串。

    size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
    
  • asctime(): 将 struct tm 转换为字符串格式。

    char *asctime(const struct tm *tm);
    
  • ctime(): 将 time_t 转换为字符串格式。

    char *ctime(const time_t *timer);
    
  • clock(): 返回程序运行时间的时钟计数。

    clock_t clock(void);
    

4. 示例代码

以下是一个使用 <time.h> 的简单示例,展示如何获取当前时间并格式化输出:

#include <stdio.h>
#include <time.h>

int main() {
   
    time_t t;
    struct tm *tm_info;
    char buffer[26];

    // 获取当前时间
    time(&t);
    // 转换为当地时间
    tm_info = localtime(&t);

    // 格式化时间
    strftime(buffer, 26, "%Y-%m-%d %H:%M:%S", tm_info);
    printf("当前时间: %s\n", buffer);

    return 0;
}

5. 注意事项

  • 使用 localtime() 返回的 struct tm 是指向静态内存的指针,后续调用可能会覆盖其内容,建议使用 localtime_r()(线程安全)或在使用后立即复制内容。
  • strftime() 的格式化字符串可以使用多种格式符,例如 %Y 表示年份,%m 表示月份,%d 表示日期等。

通过以上内容,你可以对 <time.h> 有一个全面的理解,并能够在 C 程序中有效地处理时间和日期。

相关文章
|
2月前
|
JSON 自然语言处理 API
电商 API 接口:多平台商品评论分析的利器
在电商竞争激烈的今天,商品评论成为消费者决策的重要参考。本文介绍如何通过电商 API 接口(如淘宝、京东等)高效获取多平台评论数据,并结合 Python 实现评论分析,包括评分统计、情感分析与趋势洞察,帮助商家快速优化产品与营销策略,实现数据驱动的精准决策。
104 0
|
数据安全/隐私保护
BUUCTF 数据包中的线索 1
BUUCTF 数据包中的线索 1
566 0
|
3月前
|
消息中间件 人工智能 安全
企业级AI应用需要系统工程支撑,如何通过MCP大模型架构实现全链路实战解构?
本文三桥君深入探讨了MCP大模型架构在企业级AI应用中的全链路实战解构。从事件驱动、统一中台、多端接入、API网关、AI Agent核心引擎等九个核心模块出发,系统阐述了该架构如何实现低耦合高弹性的智能系统构建。AI专家三桥君提出从技术、内容、业务三个维度构建评估体系,为企业级AI应用提供了从架构设计到落地优化的完整解决方案。
225 0
|
12月前
|
敏捷开发 网络协议 测试技术
|
XML 存储 JSON
在 Python 中应用 protobuf
在 Python 中应用 protobuf
274 0
|
关系型数据库 MySQL Linux
【mysql】MySql主从复制,从原理到实践!
【mysql】MySql主从复制,从原理到实践!
439 0
|
JSON 物联网 数据格式
什么是MQTT 遗嘱消息(Will Message)
【2月更文挑战第17天】
986 7
什么是MQTT 遗嘱消息(Will Message)
|
Java 开发者
Java一分钟之-高级集合框架:优先队列(PriorityQueue)
【5月更文挑战第18天】`PriorityQueue`是Java集合框架中的无界优先队列,基于堆数据结构实现,保证队头元素总是最小。常见操作包括`add(E e)`、`offer(E e)`、`poll()`和`peek()`。元素排序遵循自然排序或自定义`Comparator`。常见问题包括错误的排序逻辑、可变对象排序属性修改和混淆`poll()`与`peek()`。示例展示了自然排序和使用`Comparator`的排序方式。正确理解和使用`PriorityQueue`能提升应用性能。
295 6
下一篇
oss教程