struct tm
是 Linux 系统(以及其他类 Unix 系统)中的一个标准结构体,用于表示日期和时间。这个结构体定义在 <time.h>
头文件中,包含了年、月、日、时、分、秒等成员变量,以及星期几和一年中的第几天等信息。
struct tm
结构体通常包含以下成员:
tm_sec
: 秒,范围从 0 到 61(考虑到闰秒)。tm_min
: 分钟,范围从 0 到 59。tm_hour
: 小时,范围从 0 到 23。tm_mday
: 一个月中的第几天,范围从 1 到 31。tm_mon
: 月份,范围从 0(一月)到 11(十二月)。tm_year
: 自 1900 年起的年数。tm_wday
: 星期几,范围从 0(星期天)到 6(星期六)。tm_yday
: 一年中的第几天,范围从 0 到 365 或 366(闰年)。tm_isdst
: 夏令时标志,正值表示夏令时有效,0 表示无效,负值表示未知。struct tm
是 C 标准库的一部分,因此它是跨平台的,可以在不同的系统和编译器上使用。struct tm
结构体转换为可读的字符串格式,或者将字符串解析为 struct tm
结构体。struct tm
转换为时间戳(自 1970 年 1 月 1 日以来的秒数),或者将时间戳转换为 struct tm
。下面是一个使用 struct tm
的简单示例,展示如何获取当前时间并将其格式化为字符串:
#include <stdio.h>
#include <time.h>
int main() {
time_t rawtime;
struct tm * timeinfo;
// 获取当前时间
time(&rawtime);
timeinfo = localtime(&rawtime);
// 打印本地时间
printf("Current local time and date: %s", asctime(timeinfo));
// 格式化时间
char buffer[80];
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", timeinfo);
printf("Formatted time: %s
", buffer);
return 0;
}
localtime
函数会根据系统的时区设置返回本地时间。如果需要处理不同时区的时间,可以使用 gmtime
函数获取 UTC 时间,或者使用 tzset
函数设置时区。localtime
和 gmtime
函数不是线程安全的,因为它们返回的是静态分配的指针。在多线程环境中,应该使用 localtime_r
和 gmtime_r
函数,它们接受一个指向 struct tm
的指针作为参数,用于存储结果。tm_isdst
成员可能需要根据具体情况进行调整,以确保正确处理夏令时的开始和结束。了解 struct tm
结构体及其相关函数的使用,可以帮助开发者更好地处理日期和时间相关的功能。
领取专属 10元无门槛券
手把手带您无忧上云