C 日期和时间
时间和日期
在 C 语言中,您可以使用 <time.h> 标头来处理日期和时间。
此库可让您获取当前时间、格式化当前时间并执行与时间相关的计算。
获取当前时间
<time.h> 库具有各种用于测量日期和时间的函数。
例如,time() 函数返回当前时间,其值为 time_t。
您可以使用 ctime() 将时间转换为可读字符串,例如"Mon Jun 24 10:15:00 2025"
示例
#include <stdio.h>
#include <time.h>
int main() {
time_t currentTime;
time(¤tTime); // 获取当前时间
printf("Current time: %s", ctime(¤tTime));
return 0;
}
时间细分
如果您想访问日期或时间的各个组成部分,例如年、月或小时,可以使用 localtime() 函数。
此函数将当前时间(来自 time())转换为 struct tm 结构体,该结构体是一种特殊的数据结构,它将日期和时间分别存储在不同的字段中。
以下是如何使用它来打印当前日期和时间的各个部分:
示例
#include <stdio.h>
#include <time.h>
int main() {
time_t now = time(NULL); // 获取当前时间
struct tm *t = localtime(&now); // 转换为本地时间结构
printf("Year: %d
", t->tm_year + 1900); // 加上 1900 即可得到实际年份。
printf("Month: %d
", t->tm_mon + 1); // 月份编号从0到11,所以加1才能与实际月份编号(1-12)一致。
printf("Day: %d
", t->tm_mday);
printf("Hour: %d
", t->tm_hour);
printf("Minute: %d
", t->tm_min);
printf("Second: %d
", t->tm_sec);
return 0;
}
注意: tm_year 存储自 1900 年以来的年数,因此我们需要加上 1900 才能得到完整的年份,而 tm_mon 从 0 开始(因此 0 代表一月,11 代表十二月)。
注意:我们使用->,因为localtime()返回一个指针,指向struct tm。
正如你在结构体与指针章节中所学到的:如果你有一个指向结构体的指针,请使用->来访问其成员。只有当你直接操作结构体本身,而不是指向它的指针时,才使用点.。
格式化日期和时间
您可以使用 strftime() 将日期和时间格式化为字符串:
示例
#include <stdio.h>
#include <time.h>
int main() {
time_t now = time(NULL);
struct tm *t = localtime(&now);
char buffer[100];
strftime(buffer, sizeof(buffer), "%d-%m-%Y %H:%M:%S", t);
printf("Formatted time: %s
", buffer);
return 0;
}
何时使用日期和时间
在 C 语言中,当您想使用日期和时间时:
- 显示当前时间或日期
- 记录事件,例如错误或用户操作
- 向文件或消息添加时间戳
- 测量执行某项操作所需的时间
- 安排或延迟操作
- 种子随机数(这样每次运行都会得到不同的结果)

