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

本文涉及的产品
云原生网关 MSE Higress,422元/月
可观测监控 Prometheus 版,每月50GB免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: `<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>,你可以方便地处理时间和日期,进行时间计算和格式化输出。

相关文章
【STM32】引脚GPIO批量操作数组&for循环流水灯
【STM32】引脚GPIO批量操作数组&for循环流水灯
1232 0
|
11月前
|
监控 Java 测试技术
Elasticsearch集群JVM调优垃圾回收器的选择
Elasticsearch集群JVM调优垃圾回收器的选择
355 1
一种典型的三极管和MOS管结合的开关控制电路
本篇博文分享在实际工作中经常使用的一种典型的三极管和MOS管结合的开关控制电路,关于三极管和MOS管的基础使用方法可以参见下文说明。
|
存储 数据挖掘 Linux
Linux C语言之时间函数精讲
Linux C语言之时间函数精讲
416 1
|
存储 芯片 内存技术
嵌入式系统中常见内存的划分方法
嵌入式系统中常见内存的划分方法
934 1
|
数据采集 API
快手商品数据采集神器,助你轻松获取商品详情数据
快手商品数据采集神器,助你轻松获取商品详情数据
|
域名解析 弹性计算 Linux
PHP SDK 的安装与调用
Alibaba Cloud SDK for PHP是支持PHP开发者快速访问阿里云服务的开发包,由Alibaba Cloud Client for PHP提供底层支持。Alibaba Cloud SDK for PHP让您不用复杂编程即可访问云服务器、云数据库RDS和云监控等多个阿里云服务。本文将为大家介绍PHP SDK的安装与调用过程。
2519 0
PHP SDK 的安装与调用
|
Java 索引
Java环形链表(图文详解)
Java环形链表(图文详解)
266 0