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 程序中有效地处理时间和日期。

相关文章
C# DEV TextEdit 设置文本框只能输入数字(整数)
C# DEV TextEdit 设置文本框只能输入数字(整数)
|
4月前
|
JSON 自然语言处理 API
电商 API 接口:多平台商品评论分析的利器
在电商竞争激烈的今天,商品评论成为消费者决策的重要参考。本文介绍如何通过电商 API 接口(如淘宝、京东等)高效获取多平台评论数据,并结合 Python 实现评论分析,包括评分统计、情感分析与趋势洞察,帮助商家快速优化产品与营销策略,实现数据驱动的精准决策。
196 0
【Qt 学习笔记】使用QtCreator创建及运行项目 | 项目初始代码解释
【Qt 学习笔记】使用QtCreator创建及运行项目 | 项目初始代码解释
2362 2
|
数据安全/隐私保护
BUUCTF 数据包中的线索 1
BUUCTF 数据包中的线索 1
668 0
|
2月前
|
Web App开发 资源调度 算法
Fresnel变换的详解
菲涅耳变换是描述光波近场衍射的核心工具,由法国物理学家菲涅耳提出,用于精确刻画光通过孔径后的传播行为。它在傍轴近似下将衍射积分转化为含二次相位因子的傅里叶形式,广泛应用于激光传输、全息成像与光学系统设计。该变换介于精确的瑞利-索末菲积分与远场的夫琅禾费衍射之间,体现了波动光学的基本特征。
575 5
|
5月前
|
消息中间件 人工智能 安全
企业级AI应用需要系统工程支撑,如何通过MCP大模型架构实现全链路实战解构?
本文三桥君深入探讨了MCP大模型架构在企业级AI应用中的全链路实战解构。从事件驱动、统一中台、多端接入、API网关、AI Agent核心引擎等九个核心模块出发,系统阐述了该架构如何实现低耦合高弹性的智能系统构建。AI专家三桥君提出从技术、内容、业务三个维度构建评估体系,为企业级AI应用提供了从架构设计到落地优化的完整解决方案。
305 0
ly~
|
存储 自然语言处理 前端开发
有哪些常见的 PHP 文件管理系统?
elFinder:开源Web文件管理器,支持文件的基本操作及拖放管理,具备多种文件预览、权限管理功能,适用于网站后台文件管理和共享主机环境。 FileRun:多语言、易用的文件管理工具,提供强大的搜索和版本控制功能,支持外部存储集成,适用于企业内部文件共享与协作。 KCFinder:轻量级PHP文件管理器,易于集成,支持文件上传下载限制,与富文本编辑器兼容,适用于博客系统和内容编辑场景。 AjaXplorer:基于Ajax技术的文件管理系统,提供流畅体验和插件扩展,支持文件分类和共享,适用于团队协作和灵活文件分享场景。
ly~
814 1
|
SQL 数据库管理
SQL语句中WITH语句的使用
SQL语句中WITH语句的使用
1130 0
|
Ubuntu 开发工具 git
ESP32-C3 VScode开发环境搭建(基于ESP-IDF—Windows和Ubuntu双环境)
对于ESP32-C3开发,自己对Arduino环境使用起来很是不习惯,既然乐鑫官方都出对应的环境,还是来试试官方环境
3755 0
ESP32-C3 VScode开发环境搭建(基于ESP-IDF—Windows和Ubuntu双环境)