先看综合案例,再逐个解释。
#include <stdio.h>
#include <time.h>
int main()
{
// 获取当前时间戳
time_t currentTime = time(NULL);
printf("Current timestamp: %ld\n", currentTime); // 这里 %ld 是用于打印 long 类型的格式控制符。 %ld 表示按照长整型打印,适用于 time_t 类型。
// 转换为本地时间结构体
struct tm *localTimeInfo = localtime(¤tTime);
printf("Year: %d\n", localTimeInfo->tm_year + 1900); // tm_year 表示自 1900 年起的年数
printf("Month: %d\n", localTimeInfo->tm_mon + 1); // tm_mon 表示月份(0 到 11)
printf("Day: %d\n", localTimeInfo->tm_mday); // tm_mday 表示月中的天数
printf("Hour: %d\n", localTimeInfo->tm_hour); // tm_hour 表示小时
printf("Minute: %d\n", localTimeInfo->tm_min); // tm_min 表示分钟
printf("Second: %d\n", localTimeInfo->tm_sec); // tm_sec 表示秒
// 本地时间结构体转换成时间戳
time_t timestamp = mktime(localTimeInfo);
printf("Timestamp: %ld\n", timestamp);
// 定义一个字符串来存储格式化后的时间,根据你的格式要求调整大小
char formattedTime[20];
// 使用 strftime 进行格式化
strftime(formattedTime, sizeof(formattedTime), "%Y-%m-%d %H:%M:%S", localTimeInfo);
printf("Formatted Time: %s\n", formattedTime);
return 0;
}
time 函数
time
函数是C语言标准库 <time.h>
中提供的函数之一,用于获取当前的系统时间。它的原型通常为:
time_t time(time_t *timer);
timer
:指向一个time_t
类型对象的指针,用于存储从公元1970年1月1日00:00:00 UTC(协调世界时)开始计算的秒数。如果传递NULL
,则该函数不会返回秒数,而是直接返回当前时间的值。
time
函数返回一个 time_t
类型的值,表示从公元1970年1月1日00:00:00 UTC开始计算的秒数,即所谓的“Unix时间戳”或“Epoch时间”。
time_t currentTime;
time_t currentTime1 = time(¤tTime);// 现在currentTime和返回值是一样的,返回值可以不写
time_t currentTime2 = time(NULL);// 参数为NULL时,返回当前时间戳。省略了中间变量,更为直接和简洁。
printf("%ld\n", currentTime);
printf("%ld\n", currentTime1);
printf("%ld\n", currentTime2);
localtime 函数
localtime
函数用于将表示时间的 time_t
类型值转换为本地时间的结构体 struct tm
。其函数声明如下:
struct tm *localtime(const time_t *timer);
timer
:指向time_t
类型的指针,用于传递时间值。
函数返回一个指向 struct tm
结构体的指针,该结构体包含了本地时间的详细信息,如年、月、日、时、分、秒等。
mktime 函数
mktime
是一个 C 标准库中的函数,用于将结构体 struct tm
表示的时间转换为日历时间(即秒数)。
time_t mktime(struct tm *timeptr);
该函数接受一个指向 struct tm
结构体的指针,结构体包含了年、月、日、时、分、秒等时间信息。mktime
将这些时间信息转换为从 1970 年 1 月 1 日开始计算的秒数。
strftime 函数
strftime
是 C 语言中用于将时间格式化为字符串的函数。其基本用法如下:
size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr);
str
: 用于存储格式化后时间的字符串的指针。maxsize
:str
的最大大小,以防止缓冲区溢出。format
: 格式字符串,指定输出的时间格式。timeptr
: 包含时间信息的struct tm
结构体指针。
下面是一些常用的时间格式说明符:
%Y
: 年份,包括世纪部分(4 位数字)。%m
: 月份(两位数字,01-12)。%d
: 月份中的天数(两位数字,01-31)。%H
: 小时(24 小时制,两位数字,00-23)。%M
: 分钟(两位数字,00-59)。%S
: 秒数(两位数字,00-59)。
strptime 函数
作用:将字符串解析为时间戳
注意:strptime 函数是 POSIX 标准中定义的,在 Windows 上不是标准 C 库的一部分。
我本机是windows系统,无法验证,以后有机会另开篇幅,自定义一个函数或用第3方库。