Skip to content

C 时间日期库

C 语言提供了 time.h 头文件来处理日期和时间。这个库包含了处理时间的函数和类型定义。

重要的时间类型

time_t

time_t 是一个用于存储时间的基本类型,通常是一个长整型,表示从 1970 年 1 月 1 日 00:00:00 UTC(称为 UNIX 纪元)开始经过的秒数。

struct tm

struct tm 是一个用于保存日期和时间信息的结构体,包含以下成员: c 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,0 表示一月) int tm_year; // 年 (从 1900 年开始的年数) int tm_wday; // 星期几 (0-6,0 表示星期日) int tm_yday; // 一年中的第几天 (0-365) int tm_isdst; // 夏令时标志 };

常用时间函数

获取当前时间

c
time_t time(time_t timer);

这个函数返回当前的系统时间。

时间转换函数

c
struct tm localtime(const time_t timer); // 将 time_t 转换为本地时间
struct tm gmtime(const time_t timer); // 将 time_t 转换为 UTC 时间
time_t mktime(struct tm timeptr); // 将 struct tm 转换为 time_t

格式化时间字符串

c
char ctime(const time_t timer); // 将 time_t 转换为字符串
char asctime(const struct tm timeptr); // 将 struct tm 转换为字符串
size_t strftime(char str, size_t maxsize, const char format, const struct tm timeptr); // 格式化时间字符串

使用示例

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

int main() {
    // 获取当前时间
    time_t now;
    time(&now);
    
    // 转换为本地时间
    struct tm *local = localtime(&now);
    
    // 使用 strftime 格式化输出
    char str[80];
    strftime(str, sizeof(str), "%Y-%m-%d %H:%M:%S", local);
    printf("当前时间:%s\n", str);
    
    // 使用 ctime 直接输出
    printf("ctime 输出:%s", ctime(&now));
    
    return 0;
}

时间计算

计算时间差

c
double difftime(time_t time2, time_t time1);  // 返回两个时间之间的秒数差

时间操作示例

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

int main() {
    time_t start, end;
    
    time(&start);
    // 执行一些操作
    time(&end);
    
    double diff = difftime(end, start);
    printf("耗时:%f\n", diff);
    
    return 0;
}

注意事项

  1. 时区处理要特别注意,使用 localtime()gmtime() 时要明确需求