gpt4 book ai didi

python - 从电子邮件中解析带有时区的日期?

转载 作者:IT老高 更新时间:2023-10-28 22:06:31 27 4
gpt4 key购买 nike

我正在尝试从电子邮件中检索日期。一开始很简单:

message = email.parser.Parser().parse(file)
date = message['Date']
print date

我收到:

'Mon, 16 Nov 2009 13:32:02 +0100'

但我需要一个不错的日期时间对象,所以我使用:

datetime.strptime('Mon, 16 Nov 2009 13:32:02 +0100', '%a, %d %b %Y %H:%M:%S %Z')

这会引发 ValueError,因为 %Z 不是 +0100 的格式。但是我在文档中找不到正确的时区格式,只有这个 %Z 用于时区。有人可以帮我吗?

最佳答案

email.utils 有一个 parsedate() RFC 2822 格式的函数,据我所知并未弃用。

>>> import email.utils
>>> import time
>>> import datetime
>>> email.utils.parsedate('Mon, 16 Nov 2009 13:32:02 +0100')
(2009, 11, 16, 13, 32, 2, 0, 1, -1)
>>> time.mktime((2009, 11, 16, 13, 32, 2, 0, 1, -1))
1258378322.0
>>> datetime.datetime.fromtimestamp(1258378322.0)
datetime.datetime(2009, 11, 16, 13, 32, 2)

但是请注意,parsedate 方法不考虑时区和time.mktime。总是需要一个本地时间元组。

>>> (time.mktime(email.utils.parsedate('Mon, 16 Nov 2009 13:32:02 +0900')) ==
... time.mktime(email.utils.parsedate('Mon, 16 Nov 2009 13:32:02 +0100'))
True

所以你仍然需要解析出时区并考虑本地时差:

>>> REMOTE_TIME_ZONE_OFFSET = +9 * 60 * 60
>>> (time.mktime(email.utils.parsedate('Mon, 16 Nov 2009 13:32:02 +0900')) +
... time.timezone - REMOTE_TIME_ZONE_OFFSET)
1258410122.0

关于python - 从电子邮件中解析带有时区的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1790795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com