summaryrefslogtreecommitdiffstats
path: root/Lib/email/utils.py
diff options
context:
space:
mode:
authorRobert Collins <rbtcollins@hp.com>2015-07-31 20:18:22 (GMT)
committerRobert Collins <rbtcollins@hp.com>2015-07-31 20:18:22 (GMT)
commit2080dc97a7d629384a1dfbad9003f3cbd9011911 (patch)
tree110a87181d0f1ed77e70fd6d26d24dfe2d334405 /Lib/email/utils.py
parent6fb1e740c67d8940fe27883d77f0dc46431aa9b4 (diff)
downloadcpython-2080dc97a7d629384a1dfbad9003f3cbd9011911.zip
cpython-2080dc97a7d629384a1dfbad9003f3cbd9011911.tar.gz
cpython-2080dc97a7d629384a1dfbad9003f3cbd9011911.tar.bz2
Issue #22932: Fix timezones in email.utils.formatdate.
Patch from Dmitry Shachnev.
Diffstat (limited to 'Lib/email/utils.py')
-rw-r--r--Lib/email/utils.py30
1 files changed, 7 insertions, 23 deletions
diff --git a/Lib/email/utils.py b/Lib/email/utils.py
index 317fdfa..5080d81 100644
--- a/Lib/email/utils.py
+++ b/Lib/email/utils.py
@@ -155,30 +155,14 @@ def formatdate(timeval=None, localtime=False, usegmt=False):
# 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
- hours, minutes = divmod(abs(offset), 3600)
- # Remember offset is in seconds west of UTC, but the timezone is in
- # minutes east of UTC, so the signs differ.
- if offset > 0:
- sign = '-'
- else:
- sign = '+'
- zone = '%s%02d%02d' % (sign, hours, minutes // 60)
+ if localtime or usegmt:
+ dt = datetime.datetime.fromtimestamp(timeval, datetime.timezone.utc)
else:
- now = time.gmtime(timeval)
- # Timezone offset is always -0000
- if usegmt:
- zone = 'GMT'
- else:
- zone = '-0000'
- return _format_timetuple_and_zone(now, zone)
+ dt = datetime.datetime.utcfromtimestamp(timeval)
+ if localtime:
+ dt = dt.astimezone()
+ usegmt = False
+ return format_datetime(dt, usegmt)
def format_datetime(dt, usegmt=False):
"""Turn a datetime into a date string as specified in RFC 2822.