https://github.com/python/cpython/commit/9eb701f627f8f19acec0839a309f5cf07d8ed143
commit: 9eb701f627f8f19acec0839a309f5cf07d8ed143
branch: 3.13
author: Miss Islington (bot) <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2026-07-02T15:21:20Z
summary:

[3.13] gh-86165: Fix Time2Internaldate with datetime timetuple (GH-151844) 
(GH-152897)

(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 109d05c423f388..22714291d601f2 100644
--- a/Lib/imaplib.py
+++ b/Lib/imaplib.py
@@ -1527,9 +1527,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 78f066e0a47eb9..00856f9684edd4 100644
--- a/Lib/test/test_imaplib.py
+++ b/Lib/test/test_imaplib.py
@@ -143,6 +143,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]

Reply via email to