https://github.com/python/cpython/commit/460fe13601d1a71f4700f6685e0f4d01d1ef0d6b
commit: 460fe13601d1a71f4700f6685e0f4d01d1ef0d6b
branch: main
author: Xiao Yuan <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2026-07-02T15:00:20Z
summary:
gh-86165: Fix Time2Internaldate with datetime timetuple (GH-151844)
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 799c9dd529c7d9..70abfa741444c3 100644
--- a/Lib/imaplib.py
+++ b/Lib/imaplib.py
@@ -1869,9 +1869,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 c8dcf95be33b63..097056c91a7f89 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]