代码之家  ›  专栏  ›  技术社区  ›  Adam Nelson

将Python datetime转换为rfc 2822

  •  28
  • Adam Nelson  · 技术社区  · 16 年前

    >>> from email.Utils import formatdate
    >>> import datetime
    >>> formatdate(datetime.datetime.now())
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/email    /utils.py", line 159, in formatdate
        now = time.gmtime(timeval)
    TypeError: a float is required
    
    3 回复  |  直到 9 年前
        1
  •  43
  •   Abgan    6 年前

    以下是一些工作代码,为了清晰起见,将其分解为简单的几部分:

    >>> import datetime
    >>> import time
    >>> from email import utils
    >>> nowdt = datetime.datetime.now()
    >>> nowtuple = nowdt.timetuple()
    >>> nowtimestamp = time.mktime(nowtuple)
    >>> utils.formatdate(nowtimestamp)
    'Tue, 10 Aug 2010 20:43:53 -0000'
    

    说明: email.utils.formatdate 需要一个时间戳——即,一个自epoch以来带有秒(及其分数)的浮点。A datetime 可以 给你一个时间元组 timetuple time.mktime 当然,我们可以从这样的元组中创建时间戳。

    编辑:在Python3.3及更新版本中,您可以用较少的步骤完成相同的操作:

    >>> import datetime
    >>> import time
    >>> from email import utils
    >>> nowdt = datetime.datetime.now()
    >>> utils.format_datetime(nowdt)
    'Tue, 10 Feb 2020 10:06:53 -0000'
    

    format_datetime docs 有关用法的详细信息。

        2
  •  25
  •   Ahmad Ogen    6 年前

    如果你真的想知道现在的时间,就打电话给我 formatdate 没有参数:

    >>> from email.utils import formatdate
    >>> formatdate()
    'Tue, 10 Aug 2010 20:40:23 -0000'
    

    但是,如果必须传递一个参数,则需要 time.time (自1970年1月1日起的秒数):

    >>> import time
    >>> formatdate(time.time())
    'Tue, 10 Aug 2010 20:41:43 -0000'
    

    FWIW公司, datetime.datetime.now() datetime 对象,这不是什么 格式化日期 期望。

    编辑为添加:如果您已经有一个datetime对象,您可以为formatdate设置适当的格式:

    >>> import datetime
    >>> dt = datetime.datetime.now()
    >>> formatdate(float(dt.strftime('%s')))
    'Tue, 10 Aug 2010 20:46:16 -0000'
    

    编辑:Alex Martelli注意到strftime的'%s'格式字符串可能无法跨平台移植。另一种可能的选择是,正如他自己所建议的,

    >>> formatdate(time.mktime(dt.timetuple()))
    'Tue, 10 Aug 2010 20:46:16 -0000'
    
        3
  •  11
  •   FauxFaux    9 年前

    python3.3除了其他评论者提到的方法之外,还添加了 format_datetime 更干净的方法:

    >>> import datetime
    >>> import email.utils
    >>> dt = datetime.datetime.now()
    >>> email.utils.format_datetime(dt)
    'Thu, 09 Mar 2017 10:50:00 -0000'
    
        4
  •  0
  •   dlink    6 年前

    使用strftime的简单方法。Python 2.7版。注:时区=EST

    >>> from datetime import datetime
    >>> my_date = datetime.now()
    >>> my_date.strftime('%a, %d %b %Y %H:%M:%S -0500')
    'Wed, 22 Apr 2020 10:52:11 -0500'