【发布时间】:2016-01-30 18:26:40
【问题描述】:
这是我想要做的:
>>> from email.utils import parsedate
>>> tup = parsedate("Fri, 22 Jan 2016 10:15:00 GMT")
>>> tup
(2016, 1, 22, 10, 15, 0, 0, 1, -1)
>>> import datetime
>>> import time
>>> timestamp = time.mktime(tup)
>>> timestamp
1453454100.0
>>> datetime.datetime.utcfromtimestamp(timestamp)
datetime.datetime(2016, 1, 22, 9, 15)
我正在使用 email.utils.parsedate 函数将 RFC 2822 日期解析为 struct_time。这看起来是正确的,小时部分是10。然后,我使用time.mktime 将其转换为时间戳,然后尝试使用datetime.utcfromtimestamp 从中获取UTC 日期时间,但出于某种奇怪的原因,日期时间中的小时为9。我真的不明白为什么。
我在 UTC+1,所以可能在某个地方发生了到当地时间的转换,但我不知道在哪里。
【问题讨论】:
-
你的时区是什么?
-
我在 UTC+1。使用 parsedate_tz 也不起作用。它返回时区偏移量作为元组中的一个额外元素,但不影响元组的其余部分。所以可能在某个地方发生了到当地时间的转换,但我不知道在哪里。
-
也许
email.parsedate函数将GMT视为时区,并包括夏令时?一般来说,我会避免像您在这里那样混合几个不同的模块(电子邮件、时间和日期时间)。pytz是一个非常好的处理时间和时区的包。 -
问题是 time.mktime 期望时间元组是本地时间。感谢您的所有帮助。