gmtime和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时区的。
 

Python:python time模块之time.gmtime([secs])函数和time.localtime([secs])函数

time.gmtime([secs])

将以自 epoch 开始的秒数表示的时间转换为 UTC 的 struct_time ,其中 dst 标志始终为零。 如果未提供 secs 或为 None ,则使用 time() 所返回的当前时间。 一秒以内的小数将被忽略。

应用例子


1.time.gmtime()
未传入任何参数时,返回当前UTC时间。北京时间2022/06/07 09:33:00

# 导入time模块
import time


# 未传入sec参数
print(time.gmtime())

 输出:

time.struct_time(tm_year=2022, tm_mon=6, tm_mday=7, tm_hour=1, tm_min=33, tm_sec=0, tm_wday=1, tm_yday=158, tm_isdst=0)


2.time.gmtime(1)
传入secs,以自 epoch 开始的秒数表示的时间转换为 UTC 的 struct_time

# 导入time模块
import time


# 传入secs参数
print(time.gmtime(1))


输出

time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=1, tm_wday=3, tm_yday=1, tm_isdst=0)


time.localtime([secs])

与 gmtime() 相似但转换为当地时间。如果未提供 secs 或为 None ,则使用由 time() 返回的当前时间。当 DST 适用于给定时间时,dst标志设置为 1 。

应用例子


1.time.localtime()
未传入任何参数时,返回当前本地时间。北京时间2022/06/07 09:33:00

# 导入time模块
import time


# 未传入sec参数
print(time.localtime())


输出:

time.struct_time(tm_year=2022, tm_mon=6, tm_mday=7, tm_hour=9, tm_min=33, tm_sec=0, tm_wday=1, tm_yday=158, tm_isdst=0)


2.time.localtime(1)
传入secs,以自 epoch 开始的秒数表示的时间转换为当地的 struct_time

# 导入time模块
import time

# 传入secs参数
print(time.localtime(1))


输出:

time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=1, tm_wday=3, tm_yday=1, tm_isdst=0)


class time.struct_time


返回的时间值序列的类型为 gmtime() 、 localtime() 和 strptime() 。它是一个带有 named tuple 接口的对象:可以通过索引和属性名访问值。 存在以下值:

索引    属性    属性
0    tm_year    (例如,1993)
1    tm_mon    range [1, 12]
2    tm_mday    range [1, 31]
3    tm_hour    range [0, 23]
4    tm_min    range [0, 59]
5    tm_sec    range [0, 61]; 见 strftime() 介绍中的 (2)
6    tm_wday    range [0, 6] ,周一为 0
7    tm_yday    range [1, 366]
8    tm_isdst    0, 1 或 -1;如下所示
N/A    tm_zone    时区名称的缩写
N/A    tm_gmtoff    以秒为单位的UTC以东偏离
请注意,与C结构不同,月份值是 [1,12] 的范围,而不是 [0,11]。

在调用 mktime() 时, tm_isdst 可以在夏令时生效时设置为1,而在夏令时不生效时设置为0。 值-1表示这是未知的,并且通常会导致填写正确的状态。

当一个长度不正确的元组被传递给期望 struct_time 的函数,或者具有错误类型的元素时,会引发 TypeError 。
 

Python学习:python time模块之time.gmtime([secs])函数和time.localtime([secs])函数_Carol.Carol的博客-CSDN博客_python中gmtime函数icon-default.png?t=M4ADhttps://blog.csdn.net/sinat_37960022/article/details/110924140Linux中gmtime和localtime的区别(time_t格式转换为tm格式)_JANYI2018的博客-CSDN博客_gmtimeicon-default.png?t=M4ADhttps://blog.csdn.net/sweetfather/article/details/81776358

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值