如何在转换为Unix时间时指定时区(UTC)?(Python)
我有一个UTC时间戳,格式是IS8601,现在想把它转换成Unix时间。下面是我在控制台的操作记录:
In [9]: mydate
Out[9]: '2009-07-17T01:21:00.000Z'
In [10]: parseddate = iso8601.parse_date(mydate)
In [14]: ti = time.mktime(parseddate.timetuple())
In [25]: datetime.datetime.utcfromtimestamp(ti)
Out[25]: datetime.datetime(2009, 7, 17, 7, 21)
In [26]: datetime.datetime.fromtimestamp(ti)
Out[26]: datetime.datetime(2009, 7, 17, 2, 21)
In [27]: ti
Out[27]: 1247815260.0
In [28]: parseddate
Out[28]: datetime.datetime(2009, 7, 17, 1, 21, tzinfo=<iso8601.iso8601.Utc object at 0x01D74C70>)
你可以看到,我得不到正确的时间。如果我用fromtimestamp(),时间会快一个小时;如果我用utcfromtimestamp(),时间会快六个小时。
有什么建议吗?
谢谢!
4 个回答
1
naive_utc_dt = parseddate.replace(tzinfo=None)
timestamp = (naive_utc_dt - datetime(1970, 1, 1)).total_seconds()
# -> 1247793660.0
utc_dt = datetime.utcfromtimestamp(timestamp)
# -> datetime.datetime(2009, 7, 17, 1, 21)
想了解更多细节,可以查看另一个类似问题的回答。
然后返回:
1
我只是猜测一下,时间差一个小时可能不是因为时区的原因,而是因为夏令时的开启或关闭。
13
你可以使用 datetime.utctimetuple()
来创建一个 UTC 时间的 struct_time
,然后再用 calendar.timegm()
将这个时间转换成 Unix 时间戳。
calendar.timegm(parseddate.utctimetuple())
这个方法还会处理夏令时的偏差,因为 utctimetuple()
会自动调整这个问题。