通過(guò)電子郵件解析帶有時(shí)區(qū)的日期?我正在嘗試從電子郵件中檢索日期。起初它很容易:message = email.parser.Parser().parse(file)date = message['Date']print date我收到:'Mon, 16 Nov 2009 13:32:02 +0100'但我需要一個(gè)不錯(cuò)的日期時(shí)間對(duì)象,所以我使用: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。但我在文檔中找不到適當(dāng)?shù)臅r(shí)區(qū)格式,只有這個(gè)%Z區(qū)域。有人可以幫助我嗎?
3 回答

開(kāi)心每一天1111
TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
email.utils
具有parsedate()
RFC 2822格式的功能,據(jù)我所知,該功能并未棄用。
>>> 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)
但是請(qǐng)注意,該parsedate
方法沒(méi)有考慮時(shí)區(qū),并且time.mktime
總是期望這里提到的本地時(shí)間元組。
>>> (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
因此,您仍然需要解析時(shí)區(qū)并考慮當(dāng)?shù)貢r(shí)差:
>>> 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

揚(yáng)帆大魚(yú)
TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
用途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
添加回答
舉報(bào)
0/150
提交
取消