Linux中gmtime和localtime的区别(time_t格式转换为tm格式)

本文介绍了Linux中gmtime和localtime两个函数的区别。gmtime返回协调世界时(UTC)的时间结构,而localtime则根据本地时区进行调整。文章通过示例代码展示了如何使用这两个函数,并解释了在某些嵌入式设备上可能出现的问题。

Linux中gmtime和localtime的区别

time()函数,返回一个从1970年1月1日 00:00:00到现在的秒数
time_t time(time_t * t); 当参数为NULL时直接返回秒数,当然也会将该值写入t指针指向的地址

gmtime();将time函数得到的秒数转换成一个UTC时间的结构体struct tm,该结构体包含什么请自行man

通过此函数gmtime()是0时区,把UTC时间转换成北京时间的话,需要在年数上加1900,月份上加1,小时数加上8

当然同类型的函数还有localtime();得到本地时间,该函数同gmtime函数唯一区别是,在转换小时数不需要加上8了。

localtime是将时区考虑在内了,转出的当前时区的时间。但是注意,有些嵌入式设备上被裁减过的系统,时区没有被设置好,导致二者转出来的时间都是0时区的。

 

Linux中gmtime和localtime的区别

前段时间用到,写了段小测试代码,个人觉得足够清楚的表明了二者的区别了,还是不明白的话,就看看APUE里面的章节吧。

#include <time.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    time_t tmpcal_ptr = {0};
    struct tm *tmp_ptr = NULL;

    tmpcal_ptr = time(NULL);
    printf("tmpcal_ptr=%d\n", tmpcal_ptr);   

    tmp_ptr = gmtime(&tmpcal_ptr);
    printf("after gmtime, the time is:\n%d:%d:%d", tmp_ptr->tm_hour, tmp_ptr->tm_min, tmp_ptr->tm_sec);

    tmp_ptr = localtime(&tmpcal_ptr);
    printf("after localtime, the time is:\n%d:%d:%d", tmp_ptr->tm_hour, tmp_ptr->tm_min, tmp_ptr->tm_sec);

    return 0;
}

运行结果如下:

基本的意思是,gmtime转出来的是0时区的标准时间

localtime是将时区考虑在内了,转出的当前时区的时间。但是注意,有些嵌入式设备上被裁减过的系统,时区没有被设置好,导致二者转出来的时间都是0时区的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值