https://github.com/python/cpython/commit/7dd15e4f76bed0af816316ab27d51a859a5b55b5 commit: 7dd15e4f76bed0af816316ab27d51a859a5b55b5 branch: 3.15 author: Miss Islington (bot) <[email protected]> committer: serhiy-storchaka <[email protected]> date: 2026-07-02T15:29:55Z summary:
[3.15] gh-86165: Fix Time2Internaldate with datetime timetuple (GH-151844) (GH-152895) (cherry picked from commit 460fe13601d1a71f4700f6685e0f4d01d1ef0d6b) Co-authored-by: Xiao Yuan <[email protected]> files: A Misc/NEWS.d/next/Library/2026-06-21-15-50-24.gh-issue-86165.dyac1G.rst M Lib/imaplib.py M Lib/test/test_imaplib.py diff --git a/Lib/imaplib.py b/Lib/imaplib.py index e444abb4f1f77c..eea29d2fef9cc6 100644 --- a/Lib/imaplib.py +++ b/Lib/imaplib.py @@ -1863,9 +1863,8 @@ def Time2Internaldate(date_time): dt = datetime.fromtimestamp(date_time, timezone.utc).astimezone() elif isinstance(date_time, tuple): - try: - gmtoff = date_time.tm_gmtoff - except AttributeError: + gmtoff = getattr(date_time, "tm_gmtoff", None) + if gmtoff is None: if time.daylight: dst = date_time[8] if dst == -1: diff --git a/Lib/test/test_imaplib.py b/Lib/test/test_imaplib.py index f734ebfaa1a009..d02c0498dabd37 100644 --- a/Lib/test/test_imaplib.py +++ b/Lib/test/test_imaplib.py @@ -142,6 +142,15 @@ def test_Time2Internaldate(self): internal = imaplib.Time2Internaldate(t) self.assertEqual(internal, expected) + @run_with_tz('STD-1DST,M3.2.0,M11.1.0') + def test_Time2Internaldate_datetime_timetuple(self): + date_time = datetime.fromtimestamp(2000000000).timetuple() + self.assertIsNone(date_time.tm_gmtoff) + self.assertEqual( + imaplib.Time2Internaldate(date_time), + '"18-May-2033 05:33:20 +0200"', + ) + def test_that_Time2Internaldate_returns_a_result(self): # Without tzset, we can check only that it successfully # produces a result, not the correctness of the result itself, diff --git a/Misc/NEWS.d/next/Library/2026-06-21-15-50-24.gh-issue-86165.dyac1G.rst b/Misc/NEWS.d/next/Library/2026-06-21-15-50-24.gh-issue-86165.dyac1G.rst new file mode 100644 index 00000000000000..0b630e9ae34683 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-06-21-15-50-24.gh-issue-86165.dyac1G.rst @@ -0,0 +1,3 @@ +Fix :func:`imaplib.Time2Internaldate` to use the local timezone offset for +``time.struct_time`` values with ``tm_gmtoff`` set to ``None``, as returned by +``datetime.datetime.timetuple()``. Contributed by Xiao Yuan. _______________________________________________ Python-checkins mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3//lists/python-checkins.python.org Member address: [email protected]
