struct tm和time_t的转换

本文介绍了一个使用C语言处理时间的示例程序。该程序演示了如何利用time()函数获取当前时间,并通过gmtime()函数将时间转换为可读格式。此外,还展示了如何使用mktime()函数从struct tm结构体中获取时间戳。

#include<stdio.h>
#include<time.h>
void main()
{
    long t;
    time_t s;
    int i;
    short e;
    struct tm *ptm;
    e=i=t=time(NULL);
    ptm=gmtime(&t);             //取地址,即参数是指针
    printf("time的返回值long是:%ld/n",t);
    printf("time的返回值int是:%d/n",i);
    printf("time的返回值short是:%d/n",e);
    printf("秒(tm_sec):%d/n",ptm->tm_sec);
    printf("分(tm_min):%d/n",ptm->tm_min);
    printf("时(tm_hour):%d/n",ptm->tm_hour);
    printf("日(tm_mday):%d/n",ptm->tm_mday);
    printf("月(tm_mon):1+%d/n",ptm->tm_mon);
    printf("年(tm_year):1900+%d/n",ptm->tm_year);
    printf("星期(tm_wday):%d/n",ptm->tm_wday);
    printf("天数(tm_yday:%d/n",ptm->tm_yday);
    printf("夏令时标志(tm_isdst):%d/n",ptm->tm_isdst);
    s=mktime(ptm);          //取地址,即指针
    printf("time的返回值long是:%ld/n",s);
}

### C语言中 `struct tm` 与 `time_t` 的相互转换 在 C 语言中,`struct tm` `time_t` 是两种常用的时间表示方式。`time_t` 是一种以秒为单位的时间戳,通常从 1970 年 1 月 1 日开始计数。而 `struct tm` 则是一个结构体,用于存储详细的日期时间信息,例如年、月、日、时、分、秒等[^2]。 #### 将 `struct tm` 转换为 `time_t` 可以通过 `mktime` 函数将 `struct tm` 类型的时间结构转换为 `time_t` 类型的时间戳。以下是一个示例代码: ```c #include <stdio.h> #include <time.h> int main() { struct tm time_info = {0}; time_info.tm_year = 2023 - 1900; // 年份从 1900 开始计算 time_info.tm_mon = 9 - 1; // 月份从 0 开始计算 time_info.tm_mday = 15; // 日 time_info.tm_hour = 14; // 小时 time_info.tm_min = 30; // 分钟 time_info.tm_sec = 0; // 秒 time_t result = mktime(&time_info); // 将 struct tm 转换time_t printf("Time in seconds since epoch: %ld\n", (long)result); return 0; } ``` 上述代码通过设置 `struct tm` 的各个字段来定义一个具体的时间点,并使用 `mktime` 函数将其转换为 `time_t` 类型的时间戳[^1]。 #### 将 `time_t` 转换为 `struct tm` 可以使用 `localtime` 或 `gmtime` 函数将 `time_t` 类型的时间戳转换为 `struct tm` 类型的时间结构。`localtime` 返回本地时间,而 `gmtime` 返回协调世界时间(UTC)。以下是一个示例代码: ```c #include <stdio.h> #include <time.h> int main() { time_t raw_time = time(NULL); // 获取当前时间的时间戳 struct tm *time_info = localtime(&raw_time); // 将 time_t 转换struct tm if (time_info != NULL) { printf("Year: %d\n", time_info->tm_year + 1900); printf("Month: %d\n", time_info->tm_mon + 1); printf("Day: %d\n", time_info->tm_mday); printf("Hour: %d\n", time_info->tm_hour); printf("Minute: %d\n", time_info->tm_min); printf("Second: %d\n", time_info->tm_sec); } return 0; } ``` 上述代码展示了如何使用 `localtime` 函数将 `time_t` 类型的时间戳转换为 `struct tm` 类型的时间结构,并打印出具体的日期时间信息[^2]。 #### 注意事项 - 在设置 `struct tm` 的字段时,需要注意其字段的基数。例如,`tm_year` 是从 1900 开始计算的,而 `tm_mon` 是从 0 开始计算的。 - 使用 `mktime` 函数时,输入的 `struct tm` 结构会被标准化。例如,如果设置了超出范围的值(如第 32 天),`mktime` 会自动调整为下一个月的正确日期。 - `localtime` `gmtime` 返回的是指向静态分配的 `struct tm` 结构的指针,因此在多次调用时需要小心避免覆盖问题[^3]。 ### 示例总结 通过 `mktime` 函数可以将 `struct tm` 转换为 `time_t`,而通过 `localtime` 或 `gmtime` 函数可以将 `time_t` 转换为 `struct tm`。这些函数提供了灵活的方式来处理时间日期信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值