通过电子邮件解析带有时区的日期?

通过电子邮件解析带有时区的日期?

我正在尝试从电子邮件中检索日期。起初它很容易:

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, since %Z isn't format for +0100。但我在文档中找不到适当的时区格式,只有这个%Z区域。有人可以帮助我吗?


胡子哥哥
浏览 933回答 3
3回答

开心每一天1111

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

扬帆大鱼

用途email.utils.parsedate_tz(date):msg=email.message_from_file(open(file_name))date=Nonedate_str=msg.get('date')if date_str:     date_tuple=email.utils.parsedate_tz(date_str)     if date_tuple:         date=datetime.datetime.fromtimestamp(email.utils.mktime_tz(date_tuple))if date:     ... # valid date found
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python