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

简介: `<time.h>` 是 C 标准库中用于处理时间和日期的头文件,提供了多种函数、宏和类型来获取和操作时间信息。重要数据类型包括 `time_t` 和 `struct tm`,前者表示从 1970 年 1 月 1 日以来的秒数,后者包含详细的日期和时间字段。

<time.h> 是 C 标准库中用于处理时间和日期的头文件。它提供了一系列函数、宏和类型,以便程序员能够获取和操作时间信息。以下是 <time.h> 中的一些重要内容的详细解释。

1. 重要的数据类型

  • time_t:

    • 用于表示时间的类型,通常是一个整数,表示自 1970 年 1 月 1 日 00:00:00 UTC(称为“纪元”)以来的秒数。
  • struct tm:

    • 用于表示分解的时间信息,包含以下字段:
      • int tm_sec:秒(0-60)
      • int tm_min:分钟(0-59)
      • int tm_hour:小时(0-23)
      • int tm_mday:一个月中的天数(1-31)
      • int tm_mon:月份(0-11,0 表示一月)
      • int tm_year:自 1900 年以来的年份
      • int tm_wday:星期几(0-6,0 表示星期日)
      • int tm_yday:一年中的天数(0-365)
      • int tm_isdst:夏令时标志

2. 重要的函数

  • time_t time(time_t *timer):

    • 获取当前时间,并将其存储在 timer 指向的变量中(如果不需要,可以传递 NULL)。
  • struct tm *localtime(const time_t *timer):

    • time_t 类型的时间转换为本地时间的 struct tm 结构。
  • struct tm *gmtime(const time_t *timer):

    • time_t 类型的时间转换为协调世界时(UTC)的 struct tm 结构。
  • time_t mktime(struct tm *timeptr):

    • struct tm 结构转换为 time_t 类型的时间。
  • char *asctime(const struct tm *timeptr):

    • struct tm 结构转换为字符串格式(如 "Wed Jun 30 21:49:08 2021")。
  • char *ctime(const time_t *timer):

    • time_t 类型的时间转换为字符串格式。
  • double difftime(time_t end, time_t beginning):

    • 计算两个 time_t 时间之间的差值(以秒为单位)。
  • void clock_t clock(void):

    • 返回程序执行的处理器时间(以时钟周期为单位)。
  • void srand(unsigned int seed)int rand(void):

    • 用于生成随机数,通常与时间结合使用以获得不同的随机数序列。

3. 时间格式化

  • strftime:
    • 用于格式化时间。函数原型为:
      size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
      
    • format 字符串可以包含各种格式化指令,例如:
      • %Y:四位年份
      • %m:两位月份
      • %d:两位天
      • %H:两位小时(24小时制)
      • %M:两位分钟
      • %S:两位秒

4. 示例代码

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

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

int main() {
   
    time_t now;
    struct tm *local;
    char buffer[80];

    // 获取当前时间
    time(&now);

    // 转换为本地时间
    local = localtime(&now);

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

    return 0;
}

5. 注意事项

  • 在使用 localtimegmtime 函数时,返回的指针指向的 struct tm 是静态分配的,因此在后续调用中会被覆盖。如果需要保留值,可以复制结构体。
  • strftime 和其他格式化函数的行为可能依赖于系统的区域设置(locale)。

通过使用 <time.h>,你可以方便地处理时间和日期,进行时间计算和格式化输出。

相关文章
|
机器学习/深度学习 算法 测试技术
机器学习SVM算法数字识别器
机器学习SVM算法数字识别器
362 0
|
网络安全 开发工具 文件存储
在群晖NAS上快速搭建属于自己的Git Server
在群晖NAS上快速搭建属于自己的Git Server
3298 0
|
1月前
|
存储 人工智能 弹性计算
2025阿里云双十一优惠活动政策全解析:速度领券轻松省万元,还有企业上云补贴免费领取
2025阿里云双11大促开启!领2088元代金券,享企业上云补贴,爆款云服务器低至38元/年,ECS新老同享99元/年,AI大模型、数据库、建站等全品类优惠,速戳参与!
|
存储 NoSQL Java
分布式锁中的王者方案 - Redission
分布式锁中的王者方案 - Redission
211 1
|
Shell
Shell while 语法(: 死循环)
Shell while 语法(: 死循环)
502 0
一种典型的三极管和MOS管结合的开关控制电路
本篇博文分享在实际工作中经常使用的一种典型的三极管和MOS管结合的开关控制电路,关于三极管和MOS管的基础使用方法可以参见下文说明。
|
SQL 数据库 流计算
Flink CDC数据读取问题之一致性如何解决
Flink CDC 使用Change Data Capture (CDC)技术从数据库捕获变更事件,并利用Flink的流处理能力确保数据读取一致性。相较于传统工具,它具备全增量一体化数据集成能力,满足实时性需求。在实践中解决了高效数据同步、稳定同步大量表数据等问题。应用场景包括实时数据同步、实时数据集成等。快速上手需学习基本概念与实践操作。未来发展方向包括提升效率与稳定性,并依据用户需求持续优化。
394 1
|
XML 运维 监控
【深入探究 C++ 日志库清理策略】glog、log4cplus 和 spdlog 的日志文件管理策略
【深入探究 C++ 日志库清理策略】glog、log4cplus 和 spdlog 的日志文件管理策略
1079 0
|
机器学习/深度学习 人工智能 算法
人工智能在电气自动化控制系统中的应用及实现
人工智能在电气自动化控制系统中的应用及实现
544 0
|
域名解析 弹性计算 Linux
PHP SDK 的安装与调用
Alibaba Cloud SDK for PHP是支持PHP开发者快速访问阿里云服务的开发包,由Alibaba Cloud Client for PHP提供底层支持。Alibaba Cloud SDK for PHP让您不用复杂编程即可访问云服务器、云数据库RDS和云监控等多个阿里云服务。本文将为大家介绍PHP SDK的安装与调用过程。
2589 0
PHP SDK 的安装与调用