【发布时间】:2010-12-06 19:59:33
【问题描述】:
我知道如何反其道而行之……那就是:
>>> dt.rfc822()
'Sun, 09 Mar 1997 13:45:00 -0500'
【问题讨论】:
我知道如何反其道而行之……那就是:
>>> dt.rfc822()
'Sun, 09 Mar 1997 13:45:00 -0500'
【问题讨论】:
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)
在 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)
【讨论】:
datetime,而是返回tuple。完整代码为datetime.datetime.fromtimestamp( email.utils.mktime_tz(email.utils.parsedate_tz( rfcdate )), pytz.utc )。参考:parand.com/say/index.php/2008/02/11/…
datetime.datetime.fromtimestamp(rfc822.mktime_tz(rfc822.parsedate_tz(rfc822String)))
rfc822 模块早于 RFC2822。事实证明,在 RFC 之后命名模块并不是一个好主意 :) 这在 Python3 中已修复。当前的其实是RFC5322
utcfromtimestamp UTC 日期方法:datetime.datetime.utcfromtimestamp(email.utils.mktime_tz(email.utils.parsedate_tz(rfcdate)))
如果你去掉时区,你可以这样做:
datetime.datetime.strptime('Sun, 09 Mar 1997 13:45:00', '%a, %d %b %Y %H:%M:%S')
【讨论】:
从 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)))
【讨论】: