<time.h>
是 C 标准库中的一个重要头文件,用于处理与时间相关的函数。它提供了多种功能,如获取当前时间、计算时间差、设置时间格式等。通过 time.h
,程序员可以轻松管理时间和日期,进行时间计算或格式化输出。
📖 目录
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(¤t_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
:存储格式化时间的字符串。max
:str
缓存区的大小。format
:时间格式。tm
:struct 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(¤t_time);
tm_info = localtime(¤t_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 程序的时间管理至关重要,常用于获取当前时间、处理计时任务以及转换不同格式的时间。
发表回复