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

相关文章
|
12月前
|
Java 数据库 UED
Java的多线程有什么用
Java的多线程技术广泛应用于提升程序性能和用户体验,具体包括:提高性能,通过并行执行充分利用多核CPU;保持响应性,使用户界面在执行耗时操作时仍流畅交互;资源共享,多个线程共享同一内存空间以协同工作;并发处理,高效管理多个客户端请求;定时任务,利用`ScheduledExecutorService`实现周期性操作;任务分解,将大任务拆分以加速计算。多线程尤其适用于高并发和并行处理场景。
193 15
|
12月前
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
12月前
|
Java
Java Object 类详解
在 Java 中,`Object` 类是所有类的根类,每个 Java 类都直接或间接继承自 `Object`。作为所有类的超类,`Object` 定义了若干基本方法,如 `equals`、`hashCode`、`toString` 等,这些方法在所有对象中均可使用。通过重写这些方法,可以实现基于内容的比较、生成有意义的字符串表示以及确保哈希码的一致性。此外,`Object` 还提供了 `clone`、`getClass`、`notify`、`notifyAll` 和 `wait` 等方法,支持对象克隆、反射机制及线程同步。理解和重写这些方法有助于提升 Java 代码的可读性和可维护性。
370 20
|
12月前
|
安全 Python
Python 高级编程:高效读取 txt 文件的技巧与实践
在 Python 中,读取 txt 文件是常见操作。本文介绍了使用 `with` 语句自动管理文件资源、逐行读取文件、读取特定字节范围内容、处理编码问题以及使用缓冲读取提高性能等高级方法,确保代码高效且安全。通过这些技巧,你可以更灵活地处理文件内容,并避免资源泄漏等问题。原文链接:https://www.wodianping.com/app/2024-10/44183.html
175 18
|
12月前
|
机器学习/深度学习 人工智能 TensorFlow
利用AI技术实现智能垃圾分类
【8月更文挑战第67天】随着人工智能技术的不断发展,越来越多的应用场景开始涌现。本文将介绍如何利用AI技术实现智能垃圾分类,通过代码示例和实际应用案例,帮助读者了解AI技术在垃圾分类领域的应用价值和潜力。
793 19
|
12月前
|
设计模式 安全 Java
Java Iterator(迭代器)详解
在Java中,`Iterator`是一种设计模式,用于遍历如`List`、`Set`等集合,提供统一访问元素的方式而不暴露内部结构。它包括`hasNext()`、`next()`和`remove()`方法,通过集合的`iterator()`方法获取实例,可用于安全删除元素,避免`ConcurrentModificationException`。
158 14
|
12月前
|
安全 Java 编译器
关于 Python 3.13 你所需要知道的几点
关于 Python 3.13 你所需要知道的几点
257 14
关于 Python 3.13 你所需要知道的几点
|
12月前
|
数据可视化 Python
Python 高级绘图:探索数据可视化
在Python中,利用matplotlib、seaborn等库可实现数据的可视化。matplotlib功能丰富,支持基础图表绘制;seaborn则提供了更美观的默认样式。此外,matplotlib还支持3D图形及动态图表的生成,满足多样化的数据展示需求。 示例代码展示了如何使用这些库绘制正弦波、散点图、3D曲面图及动态更新的折线图。通过numpy生成数据,并借助matplotlib与seaborn的强大绘图功能,实现数据的直观呈现。
179 17
|
12月前
|
机器学习/深度学习 人工智能 开发框架
企业内训|提示词工程师高阶技术内训-某运营商研发团队
TsingtaoAI 近期为某运营商技术团队提供了为期两天的提示词工程师高级技术培训。课程涵盖深度学习前沿理论、大模型技术架构设计与优化,以及提示词工程在电信行业的应用。通过技术探讨、案例分析和实战操作,学员将掌握最新的 LLM 技术和提示词工程技巧,提升在复杂业务环境中设计、优化和部署大模型解决方案的能力。课程强调技术深度与业务场景结合,适合具有一定深度学习基础的专业人员。
244 14
|
12月前
|
监控 供应链
医院管理信息系统源代码,中小医院云HIS系统源码
HIS系统是医院信息化的核心,涵盖门诊、住院、药房、财务等模块。其功能包括患者管理、电子病历、医生工作站、护士工作站及临床诊疗等,实现从挂号收费到住院结算全流程自动化管理,提升医疗服务效率与质量。该系统通过综合管理与统计分析,优化医院运营。
438 12