我想将Python日期时间转换为RFC 2822日期时间。我尝试过这些方法无济于事:
>>> 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
答案 0 :(得分:38)
这里有一些工作代码,为了清楚起见分解成简单的部分:
>>> 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
想要一个时间戳 - 即,自纪元以来具有秒(及其一小部分)的浮点数。 datetime
实例不会直接为您提供时间戳 - 但是,可以为您提供timetuple
方法的时间元组,以及time.mktime
当然可以从这样的元组中创建一个时间戳。
答案 1 :(得分:24)
如果您确实想要当前时间,只需在没有参数的情况下调用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
个对象,而不是formatdate
期望的对象。
编辑添加:如果您已有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'
答案 2 :(得分:8)
Python 3.3,除了其他评论者提到的方法外,还添加了一个var actionContext = context.Resource as Microsoft.AspNetCore.Mvc.ActionContext;
方法,它更清晰:
format_datetime
答案 3 :(得分:0)
使用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'