<time.h> 是 C 标准库中用于处理时间和日期的头文件。它提供了一系列函数、宏和类型,以便程序员能够获取和操作时间信息。以下是 <time.h> 中的一些重要内容的详细解释。
1. 重要的数据类型
time_t:- 用于表示时间的类型,通常是一个整数,表示自 1970 年 1 月 1 日 00:00:00 UTC(称为“纪元”)以来的秒数。
struct tm:- 用于表示分解的时间信息,包含以下字段:
int tm_sec:秒(0-60)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:夏令时标志
- 用于表示分解的时间信息,包含以下字段:
2. 重要的函数
time_t time(time_t *timer):- 获取当前时间,并将其存储在
timer指向的变量中(如果不需要,可以传递 NULL)。
- 获取当前时间,并将其存储在
struct tm *localtime(const time_t *timer):- 将
time_t类型的时间转换为本地时间的struct tm结构。
- 将
struct tm *gmtime(const time_t *timer):- 将
time_t类型的时间转换为协调世界时(UTC)的struct tm结构。
- 将
time_t mktime(struct tm *timeptr):- 将
struct tm结构转换为time_t类型的时间。
- 将
char *asctime(const struct tm *timeptr):- 将
struct tm结构转换为字符串格式(如 "Wed Jun 30 21:49:08 2021")。
- 将
char *ctime(const time_t *timer):- 将
time_t类型的时间转换为字符串格式。
- 将
double difftime(time_t end, time_t beginning):- 计算两个
time_t时间之间的差值(以秒为单位)。
- 计算两个
void clock_t clock(void):- 返回程序执行的处理器时间(以时钟周期为单位)。
void srand(unsigned int seed)和int rand(void):- 用于生成随机数,通常与时间结合使用以获得不同的随机数序列。
3. 时间格式化
strftime:- 用于格式化时间。函数原型为:
size_t strftime(char *s, size_t max, const char *format, const struct tm *tm); format字符串可以包含各种格式化指令,例如:%Y:四位年份%m:两位月份%d:两位天%H:两位小时(24小时制)%M:两位分钟%S:两位秒
- 用于格式化时间。函数原型为:
4. 示例代码
以下是一个简单的示例,演示如何使用 <time.h> 获取当前时间并格式化输出:
#include <stdio.h>
#include <time.h>
int main() {
time_t now;
struct tm *local;
char buffer[80];
// 获取当前时间
time(&now);
// 转换为本地时间
local = localtime(&now);
// 格式化时间
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local);
printf("当前时间: %s\n", buffer);
return 0;
}
5. 注意事项
- 在使用
localtime和gmtime函数时,返回的指针指向的struct tm是静态分配的,因此在后续调用中会被覆盖。如果需要保留值,可以复制结构体。 strftime和其他格式化函数的行为可能依赖于系统的区域设置(locale)。
通过使用 <time.h>,你可以方便地处理时间和日期,进行时间计算和格式化输出。