如何将RFC 2822日期/时间解析为Python datetime?

31 投票
6 回答
14685 浏览
提问于 2025-04-15 11:42

我有一个日期,格式是RFC 2822规定的,比如说 Fri, 15 May 2009 17:58:28 +0000,这是一个字符串。请问在Python 2.5中,有没有快速或者标准的方法把它转换成 datetime 对象?我试着写了一个strptime的格式字符串,但那个 +0000 的时区标识让我搞不懂解析器该怎么处理。

6 个回答

12
from email.utils import parsedate
print parsedate('Fri, 15 May 2009 17:58:28 +0000')

文档

16

我想进一步解释一下之前的回答。email.utils.parsedateemail.utils.parsedate_tz 这两个函数都会返回一个元组。因为提问者需要的是一个 datetime.datetime 对象,所以我这里加了一些例子来补充说明:

from email.utils import parsedate
from datetime import datetime
import time

t = parsedate('Sun, 14 Jul 2013 20:14:30 -0000')
d1 = datetime.fromtimestamp(time.mktime(t))

或者:

d2 = datetime.datetime(*t[:6])

注意,d1d2 都是普通的日期时间对象,它们没有存储时区信息。如果你需要带有时区信息的日期时间对象,可以查看 tzinfodatetime() 的参数。

另外,你也可以使用 dateutil 模块。

45

问题是,parsedate 会忽略时间偏移量。

你可以这样做:

from email.utils import parsedate_tz
print parsedate_tz('Fri, 15 May 2009 17:58:28 +0700')

撰写回答