<time.h>
是 C 标准库中的一个头文件,提供了一系列与时间和日期相关的功能。以下是对 <time.h>
中常用类型、宏和函数的详细介绍。
1. 重要数据类型
time_t
: 用于表示时间的类型,通常是一个整数,表示从某个时间点(通常是1970年1月1日00:00:00 UTC)到当前时间的秒数。struct tm
: 用于表示分解后的时间信息,包含以下字段:tm_sec
:秒(0-60)tm_min
:分钟(0-59)tm_hour
:小时(0-23)tm_mday
:一个月中的天(1-31)tm_mon
:月份(0-11)tm_year
:自1900年以来的年份tm_wday
:一周中的天(0-6,0表示星期日)tm_yday
:一年中的天数(0-365)tm_isdst
:夏令时标志
2. 常用宏
CLOCKS_PER_SEC
: 每秒的时钟计数,通常为 1000000(即每秒有 1,000,000 个时钟滴答)。
3. 常用函数
time()
: 返回当前的时间(自1970年1月1日以来的秒数)。time_t time(time_t *tloc);
difftime()
: 计算两个time_t
值之间的差(以秒为单位)。double difftime(time_t end, time_t beginning);
mktime()
: 将struct tm
转换为time_t
。time_t mktime(struct tm *timeptr);
localtime()
: 将time_t
转换为struct tm
,表示当地时间。struct tm *localtime(const time_t *timer);
gmtime()
: 将time_t
转换为struct tm
,表示 UTC 时间。struct tm *gmtime(const time_t *timer);
strftime()
: 格式化时间,将struct tm
转换为字符串。size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
asctime()
: 将struct tm
转换为字符串格式。char *asctime(const struct tm *tm);
ctime()
: 将time_t
转换为字符串格式。char *ctime(const time_t *timer);
clock()
: 返回程序运行时间的时钟计数。clock_t clock(void);
4. 示例代码
以下是一个使用 <time.h>
的简单示例,展示如何获取当前时间并格式化输出:
#include <stdio.h>
#include <time.h>
int main() {
time_t t;
struct tm *tm_info;
char buffer[26];
// 获取当前时间
time(&t);
// 转换为当地时间
tm_info = localtime(&t);
// 格式化时间
strftime(buffer, 26, "%Y-%m-%d %H:%M:%S", tm_info);
printf("当前时间: %s\n", buffer);
return 0;
}
5. 注意事项
- 使用
localtime()
返回的struct tm
是指向静态内存的指针,后续调用可能会覆盖其内容,建议使用localtime_r()
(线程安全)或在使用后立即复制内容。 strftime()
的格式化字符串可以使用多种格式符,例如%Y
表示年份,%m
表示月份,%d
表示日期等。
通过以上内容,你可以对 <time.h>
有一个全面的理解,并能够在 C 程序中有效地处理时间和日期。