summaryrefslogtreecommitdiffstats
path: root/Lib/email
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>2001-11-09 16:59:56 (GMT)
committerBarry Warsaw <barry@python.org>2001-11-09 16:59:56 (GMT)
commitaa79f4d492abd5b979e740520e95fcb717793061 (patch)
tree7ef8f810c4b7428fa05d45a061ca9e645a12e661 /Lib/email
parent3e77423a641e1331f8e0724328c3385a6a455ce1 (diff)
downloadcpython-aa79f4d492abd5b979e740520e95fcb717793061.zip
cpython-aa79f4d492abd5b979e740520e95fcb717793061.tar.gz
cpython-aa79f4d492abd5b979e740520e95fcb717793061.tar.bz2
formatdate(): An implementation to replace the one borrowed from
rfc822.py. The old rfc822.formatdate() produced date strings using obsolete syntax. The new version produces the preferred RFC 2822 dates. Also, an optional argument `localtime' is added, which if true, produces a date relative to the local timezone, with daylight savings time properly taken into account.
Diffstat (limited to 'Lib/email')
-rw-r--r--Lib/email/Utils.py38
1 files changed, 37 insertions, 1 deletions
diff --git a/Lib/email/Utils.py b/Lib/email/Utils.py
index 6bbf2d3..237b686 100644
--- a/Lib/email/Utils.py
+++ b/Lib/email/Utils.py
@@ -9,7 +9,7 @@ import re
from rfc822 import unquote, quote, parseaddr
from rfc822 import dump_address_pair
from rfc822 import AddrlistClass as _AddrlistClass
-from rfc822 import parsedate_tz, parsedate, mktime_tz, formatdate
+from rfc822 import parsedate_tz, parsedate, mktime_tz
from quopri import decodestring as _qdecode
import base64
@@ -102,3 +102,39 @@ def encode(s, charset='iso-8859-1', encoding='q'):
else:
raise ValueError, 'Illegal encoding code: ' + encoding
return '=?%s?%s?%s?=' % (charset.lower(), encoding.lower(), estr)
+
+
+
+def formatdate(timeval=None, localtime=0):
+ """Returns a formatted time as specified by RFC 2822, e.g.:
+
+ Fri, 09 Nov 2001 01:08:47 -0000
+
+ Optional timeval if given is a float time as accepted by localtime() or
+ gmtime(). Optional localtime is a flag that when true, interprets and
+ returns a time relative to the local timezone instead of UTC.
+ """
+ # Note: we cannot use strftime() because that honors the locale and RFC
+ # 2822 requires that day and month names be the English abbreviations.
+ if timeval is None:
+ timeval = time.time()
+ if localtime:
+ now = time.localtime(timeval)
+ # Calculate timezone offset, based on whether the local zone has
+ # daylight savings time, and whether DST is in effect.
+ if time.daylight and now[-1]:
+ offset = time.altzone
+ else:
+ offset = time.timezone
+ zone = '%+03d%02d' % (offset / -3600, offset % 60)
+ else:
+ now = time.gmtime(timeval)
+ # Timezone offset is always -0000
+ zone = '-0000'
+ return '%s, %02d %s %04d %02d:%02d:%02d %s' % (
+ ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'][now[6]],
+ now[2],
+ ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][now[1] - 1],
+ now[0], now[3], now[4], now[5],
+ zone)