如何将RFC822转换为python datetime对象?

Udb*_*hav 17 python rfc822

我知道如何以相反的方式做到这一点...它将是:

>>> dt.rfc822()
'Sun, 09 Mar 1997 13:45:00 -0500'
Run Code Online (Sandbox Code Playgroud)

Joh*_*ooy 30


In [1]: import rfc822     # This only works for python 2 series

In [2]: rfc822.parsedate_tz('Sun, 09 Mar 1997 13:45:00 -0500')
Out[2]: (1997, 3, 9, 13, 45, 0, 0, 1, 0, -18000)
Run Code Online (Sandbox Code Playgroud)

在python3中,parsedate_tz已移至email.utils


>>> import email.utils   # this works on Python2.5 and up
>>> email.utils.parsedate_tz('Sun, 09 Mar 1997 13:45:00 -0500')
(1997, 3, 9, 13, 45, 0, 0, 1, -1, -18000)
Run Code Online (Sandbox Code Playgroud)

  • 上述技术不返回`datetime`,而是返回`tuple`.完整的代码是`datetime.datetime.fromtimestamp(email.utils.mktime_tz(email.utils.parsedate_tz(rfcdate)),pytz.utc)`.参考:http://parand.com/say/index.php/2008/02/11/parsing-and-normalizing-dates-with-timezones-in-python/ (13认同)
  • 继续@AppleGrew评论:或者使用rfc822模块`datetime.datetime.fromtimestamp(rfc822.mktime_tz(rfc822.parsedate_tz(rfc822String)))` (3认同)
  • 在python 3中,尝试email.utils.parsedate_to_datetime. (2认同)
  • 你可以略微简化; 对于UTC中的日期,有一个`utcfromtimestamp`方法:`datetime.datetime.utcfromtimestamp(email.utils.mktime_tz(email.utils.parsedate_tz(rfcdate))) (2认同)

lod*_*lod 5

从 python 3.3 开始,有email.utils.parsedate_to_datetime(date)

>>> from email.utils import parsedate_to_datetime
>>> datestr = 'Sun, 09 Mar 1997 13:45:00 -0500'
>>> parsedate_to_datetime(datestr)
datetime.datetime(1997, 3, 9, 13, 45, tzinfo=datetime.timezone(datetime.timedelta(-1, 68400)))
Run Code Online (Sandbox Code Playgroud)