C 语言的 time.h 头文件中,time_t 是一个类型定义(typedef),用于表示日历时间(Calendar Time)。它通常用于存储时间戳(如 time() 返回的值),但它的具体底层实现取决于系统和编译器。

1、time_t 的定义

time_t 是一个由 typedef 定义的类型,通常在 time.h 头文件中定义。

typedef long time_t;

或者

typedef unsigned long time_t;

但在不同的系统上,time_t 的底层实现可能有所不同。可以使用 sizeof(time_t) 来检查 time_t 在当前系统中的大小。

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

int main() {
    printf("Size of time_t: %zu bytes\n", sizeof(time_t));
    return 0;
}

2、time_t 存储时间

time_t 一般表示从 Unix 纪元(Epoch,1970年1月1日 00:00:00 UTC)到当前时间的秒数。使用time_t 获取当前时间。

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

int main() {
    time_t current_time;
    time(¤t_time);  // 获取当前时间(从 1970-01-01 00:00:00 到现在的秒数)

    printf("Current time (time_t): %ld\n", (long)current_time);
    return 0;
}

3、time_t 的转换

time_t 主要用于计算和格式化时间。

1)转换为本地时间 struct tm

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

int main() {
    time_t now = time(NULL);
    struct tm *local = localtime(&now);  // 转换为本地时间

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

2)转换为 GMT/UTC 时间

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

int main() {
    time_t now;
    struct tm *utc_time;

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

    // 将时间转换为 UTC 时间
    utc_time = gmtime(&now);

    // 打印 UTC 时间
    printf("UTC time: %s", asctime(utc_time));

    return 0;
}

3) 计算时间差

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

int main() {
  
    time_t start = time(NULL);
    sleep(5);  // 休眠 5 秒
    time_t end = time(NULL);
    double diff = difftime(end, start);
    printf("Elapsed time: %.2f seconds\n", diff);
    return 0;
    
}