Python当地时间到格林威治时间的转换问题

时间:2018-08-13 15:47:11

标签: python python-2.7 time

我正在尝试将Unix时区时间从本地(东部时间,UTC -4)转换为UTC,并在UTC中产生新的Unix时间戳。当我将本地时间戳转换为时间结构,然后将其转换为UTC时,转换就很好了。但是,当我从生成的时间结构生成Unix时间戳时,该时间戳给出的时间比正确的UTC值早一小时。这里可能出什么问题了?

local_tstamp = 1533957121
print(time.localtime(local_tstamp))

time.struct_time(tm_year=2018, tm_mon=8, tm_mday=10, tm_hour=23, tm_min=12, tm_sec=1, tm_wday=4, tm_yday=222, tm_isdst=1)

gmt_time = time.gmtime(local_tstamp)
print(gmt_time)

time.struct_time(tm_year=2018, tm_mon=8, tm_mday=11, tm_hour=3, tm_min=12, tm_sec=1, tm_wday=5, tm_yday=223, tm_isdst=0)

gmt_tstmp = int(time.mktime(gmt_time))

print(time.localtime(gmt_tstmp))

time.struct_time(tm_year=2018, tm_mon=8, tm_mday=11, tm_hour=4, tm_min=12, tm_sec=1, tm_wday=5, tm_yday=223, tm_isdst=1)

1 个答案:

答案 0 :(得分:1)

time.mktime(t)花费的时间是 local ,而不是GMT。由于您传入的值的值为dt = 0,但本地时间实际上为dst,因此您提前一小时得到了一个值:

来自docs

  

time.mktime(t)

     

这是localtime()的反函数。它的参数是struct_time或完整的9元组(因为需要dst标志;如果未知,请使用-1作为dst标志),它以 local 时间而不是UTC表示时间。