I want to convert a Python datetime to an RFC 2822 datetime. I've tried these methods to no avail:
>>> 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
Here's some working code, broken down into simple pieces just for clarity:
Explanation:
email.utils.formatdate
wants a timestamp -- i.e., a float with seconds (and fraction thereof) since the epoch. Adatetime
instance doesn't give you a timestamp directly -- but, it can give you a time-tuple with thetimetuple
method, andtime.mktime
of course can then make a timestamp from such a tuple.EDIT: In Python 3.3 and newer you can do the same in less steps:
See
format_datetime
docs for details on usage.