<time.h> 是 C 标准库中的一个重要头文件,用于处理与时间相关的函数。它提供了多种功能,如获取当前时间、计算时间差、设置时间格式等。通过 time.h,程序员可以轻松管理时间和日期,进行时间计算或格式化输出。


📖 目录

  1. <time.h> 简介
  2. 常用函数
  3. 时间结构体
  4. 时间操作函数
  5. 示例代码
  6. 参考资料

1️⃣ <time.h> 简介

<time.h> 提供了与时间相关的功能。它包含了多个函数和宏,允许程序获取当前时间、将时间转换为可读格式、进行时间差计算等。常见的时间操作包括获取当前系统时间、将时间转化为本地时间和格林威治标准时间(GMT),以及设置格式化的时间输出。

功能

  • 获取当前时间戳。
  • 格式化和转换时间。
  • 计算时间差。
  • 生成随机数种子。

2️⃣ 常用函数

📌 time

time 函数返回从 1970 年 1 月 1 日(称为 UNIX 纪元)到当前时刻的秒数,称为“时间戳”。

原型

time_t time(time_t *t);

  • 参数t:一个 time_t 类型的指针,用于存储当前时间。如果传入 NULL,则仅返回当前时间戳。
  • 返回值:返回当前时间的时间戳(time_t 类型)。

示例

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

int main() {
    time_t current_time;
    time(&current_time);
    printf("Current time: %ld\n", current_time);
    return 0;
}

📌 localtime

localtime 函数将 time_t 时间戳转换为本地时间(根据系统的时区设置)。

原型

struct tm *localtime(const time_t *timep);

  • 参数timep:指向 time_t 类型的时间戳。
  • 返回值:返回一个指向 struct tm 结构体的指针,表示本地时间。

示例

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

int main() {
    time_t t;
    struct tm *tm_info;

    time(&t);
    tm_info = localtime(&t);

    printf("Current local time: %s", asctime(tm_info));
    return 0;
}

📌 gmtime

gmtime 函数将 time_t 时间戳转换为格林威治标准时间(UTC)。

原型

struct tm *gmtime(const time_t *timep);

  • 参数timep:指向 time_t 类型的时间戳。
  • 返回值:返回一个指向 struct tm 结构体的指针,表示 UTC 时间。

示例

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

int main() {
    time_t t;
    struct tm *tm_info;

    time(&t);
    tm_info = gmtime(&t);

    printf("Current UTC time: %s", asctime(tm_info));
    return 0;
}

📌 strftime

strftime 用于根据指定的格式将 struct tm 转换为字符串。

原型

size_t strftime(char *str, size_t max, const char *format, const struct tm *tm);

  • 参数
    • str:存储格式化时间的字符串。
    • maxstr 缓存区的大小。
    • format:时间格式。
    • tmstruct tm 结构体,包含需要格式化的时间。
  • 返回值:返回格式化后的字符数,如果出现错误则返回 0

示例

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

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

    time(&t);
    tm_info = localtime(&t);

    strftime(buffer, 80, "Now it's %I:%M%p.", tm_info);
    printf("Current local time: %s\n", buffer);
    return 0;
}

📌 difftime

difftime 用于计算两个时间点之间的秒数差。

原型

double difftime(time_t end, time_t beginning);

  • 参数
    • end:结束时间。
    • beginning:开始时间。
  • 返回值:返回两个时间点之间的秒数差。

示例

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

int main() {
    time_t start, end;

    time(&start);
    // 模拟一些延迟
    for (volatile long i = 0; i < 1000000000; i++);
    time(&end);

    double difference = difftime(end, start);
    printf("Time difference: %.2f seconds\n", difference);
    return 0;
}


3️⃣ 时间结构体

<time.h> 中,struct tm 结构体用于表示本地时间或 UTC 时间,包含各个时间元素。

📌 struct tm

struct tm {
    int tm_sec;   // 秒 (0-59)
    int tm_min;   // 分 (0-59)
    int tm_hour;  // 小时 (0-23)
    int tm_mday;  // 日期 (1-31)
    int tm_mon;   // 月份 (0-11)
    int tm_year;  // 年份 (自 1900 年以来)
    int tm_wday;  // 星期几 (0-6)
    int tm_yday;  // 年内天数 (0-365)
    int tm_isdst; // 夏令时标志
};


4️⃣ 时间操作函数

📌 clock

clock 返回程序执行时间的时钟数。

原型

clock_t clock(void);

  • 返回值:返回从程序启动到当前时刻的时钟数,单位为 CLOCKS_PER_SEC

示例

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

int main() {
    clock_t start, end;

    start = clock();
    // 模拟工作
    for (volatile long i = 0; i < 1000000000; i++);
    end = clock();

    double time_taken = ((double)(end - start)) / CLOCKS_PER_SEC;
    printf("Code executed in: %f seconds\n", time_taken);
    return 0;
}

📌 time

time 返回当前的时间戳,可以用于获取当前时间或进行时间差计算。


5️⃣ 示例代码

📌 示例:获取当前时间

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

int main() {
    time_t current_time;
    struct tm *tm_info;

    // 获取当前时间
    time(&current_time);
    tm_info = localtime(&current_time);

    // 打印格式化时间
    printf("Current local time: %02d-%02d-%d %02d:%02d:%02d\n",
           tm_info->tm_mday, tm_info->tm_mon + 1, tm_info->tm_year + 1900,
           tm_info->tm_hour, tm_info->tm_min, tm_info->tm_sec);

    return 0;
}

输出

Current local time: 24-03-2025 14:45:12


6️⃣ 参考资料

📖 C 标准库 – <time.h> 官方文档
📖 GNU C Library – time.h
📖 ISO C 标准(PDF)


📌 总结

<time.h> 是处理时间和日期的标准库头文件,包含了多个强大的函数来获取当前时间、进行时间格式化、时间差计算等。它对 C 程序的时间管理至关重要,常用于获取当前时间、处理计时任务以及转换不同格式的时间。