]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.15] gh-86165: Fix Time2Internaldate with datetime timetuple (GH-151844) (GH-152895)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 2 Jul 2026 15:29:55 +0000 (17:29 +0200)
committerGitHub <noreply@github.com>
Thu, 2 Jul 2026 15:29:55 +0000 (15:29 +0000)
(cherry picked from commit 460fe13601d1a71f4700f6685e0f4d01d1ef0d6b)

Co-authored-by: Xiao Yuan <yuanx749@gmail.com>
Lib/imaplib.py
Lib/test/test_imaplib.py
Misc/NEWS.d/next/Library/2026-06-21-15-50-24.gh-issue-86165.dyac1G.rst [new file with mode: 0644]

index e444abb4f1f77c219675a741951cfb4e3b0d5f6e..eea29d2fef9cc6f3c7711f484919906d2a9092d6 100644 (file)
@@ -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:
index f734ebfaa1a0095cb2531a69cb4a365c526ca0a2..d02c0498dabd3705d7f0ab446186afcda5fe4af5 100644 (file)
@@ -142,6 +142,15 @@ class TestImaplib(unittest.TestCase):
             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 (file)
index 0000000..0b630e9
--- /dev/null
@@ -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.