如何在转换为Unix时间时指定时区(UTC)?(Python)

2024-04-29 06:52:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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>)

如你所见,我找不到正确的时间。如果我使用fromtimestamp(),小时将提前一个小时;如果我使用utcfromtimestamp(),小时将提前六个小时

有什么建议吗?

谢谢!


Tags: indatetime格式时间tiunixoututc
3条回答

您可以使用^{}在UTC中创建struct_time,然后使用^{}将其转换为unix时间戳:

calendar.timegm(parseddate.utctimetuple())

这也会考虑任何夏时制时间偏移,因为utctimetuple()会使其正常化。

naive_utc_dt = parseddate.replace(tzinfo=None)
timestamp = (naive_utc_dt - datetime(1970, 1, 1)).total_seconds()
# -> 1247793660.0

有关详细信息,请参见another answer to similar question

后面:

utc_dt = datetime.utcfromtimestamp(timestamp)
# -> datetime.datetime(2009, 7, 17, 1, 21)

我只是猜测,但一个小时的差异可能不是因为时区,而是因为夏时制的开/关。

相关问题 更多 >