Skip to content

Commit a07548e

Browse files
committed
Issue #14653: email.utils.mktime_tz() no longer relies on system
mktime() when timezone offest is supplied.
1 parent 9ed8b4e commit a07548e

File tree

3 files changed

+13
-4
lines changed

3 files changed

+13
-4
lines changed

Lib/email/_parseaddr.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
'quote',
1414
]
1515

16-
import time
16+
import time, calendar
1717

1818
SPACE = ' '
1919
EMPTYSTRING = ''
@@ -152,13 +152,13 @@ def parsedate(data):
152152

153153

154154
def mktime_tz(data):
155-
"""Turn a 10-tuple as returned by parsedate_tz() into a UTC timestamp."""
155+
"""Turn a 10-tuple as returned by parsedate_tz() into a POSIX timestamp."""
156156
if data[9] is None:
157157
# No zone info, so localtime is better assumption than GMT
158158
return time.mktime(data[:8] + (-1,))
159159
else:
160-
t = time.mktime(data[:8] + (0,))
161-
return t - data[9] - time.timezone
160+
t = calendar.timegm(data)
161+
return t - data[9]
162162

163163

164164
def quote(str):

Lib/email/test/test_email.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2585,6 +2585,12 @@ def test_parsedate_acceptable_to_time_functions(self):
25852585
eq(time.localtime(t)[:6], timetup[:6])
25862586
eq(int(time.strftime('%Y', timetup[:9])), 2003)
25872587

2588+
def test_mktime_tz(self):
2589+
self.assertEqual(utils.mktime_tz((1970, 1, 1, 0, 0, 0,
2590+
-1, -1, -1, 0)), 0)
2591+
self.assertEqual(utils.mktime_tz((1970, 1, 1, 0, 0, 0,
2592+
-1, -1, -1, 1234)), -1234)
2593+
25882594
def test_parsedate_y2k(self):
25892595
"""Test for parsing a date with a two-digit year.
25902596

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ Core and Builtins
7373
Library
7474
-------
7575

76+
- Issue #14653: email.utils.mktime_tz() no longer relies on system
77+
mktime() when timezone offest is supplied.
78+
7679
- Fix GzipFile's handling of filenames given as bytes objects.
7780

7881
- Issue #15101: Make pool finalizer avoid joining current thread.

0 commit comments

Comments
 (0)