如何在转换为Unix时指定时区(UTC)?(蟒蛇)

ric*_*ick 5 python datetime iso8601 unix-timestamp

我有一个IS8601格式的utc时间戳,我试图将其转换为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>)
Run Code Online (Sandbox Code Playgroud)

如你所见,我无法回到正确的时间.如果我使用fromtimestamp(),则小时为1,如果我使用utcfromtimestamp(),则提前6小时

有什么建议?

谢谢!

sth*_*sth 13

您可以使用struct_timeUTC 创建datetime.utctimetuple(),然后将其转换为unix时间戳,其中包含calendar.timegm():

calendar.timegm(parseddate.utctimetuple())
Run Code Online (Sandbox Code Playgroud)

这也可以处理任何夏令时偏移,因为utctimetuple()这会使其正常化.