]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-91928: Add `datetime.UTC` alias for `datetime.timezone.utc` (GH-91973)
authorKabir Kwatra <kabir@kwatra.me>
Tue, 3 May 2022 22:14:25 +0000 (15:14 -0700)
committerGitHub <noreply@github.com>
Tue, 3 May 2022 22:14:25 +0000 (15:14 -0700)
### fixes #91928

`UTC` is now module attribute aliased to `datetime.timezone.utc`.
You can now do the following:
```python
from datetime import UTC
```

Doc/library/datetime.rst
Lib/datetime.py
Lib/test/datetimetester.py
Misc/ACKS
Misc/NEWS.d/next/Library/2022-04-26-18-02-44.gh-issue-91928.V0YveU.rst [new file with mode: 0644]
Modules/_datetimemodule.c

index f447b7bc9491e4df90b480739979fd6424c5cc44..ca17dc880cfb3458d254cdd11c0d50567c1f3313 100644 (file)
@@ -84,6 +84,12 @@ The :mod:`datetime` module exports the following constants:
    The largest year number allowed in a :class:`date` or :class:`.datetime` object.
    :const:`MAXYEAR` is ``9999``.
 
+.. attribute:: UTC
+
+   Alias for the UTC timezone singleton :attr:`datetime.timezone.utc`.
+
+   .. versionadded:: 3.11
+
 Available Types
 ---------------
 
index 260b1de38877a64264f61b9d04af03dc142ec884..7f79aa436eb5ea1693eea3ac96634d60655ff417 100644 (file)
@@ -5,7 +5,7 @@ time zone and DST data sources.
 """
 
 __all__ = ("date", "datetime", "time", "timedelta", "timezone", "tzinfo",
-           "MINYEAR", "MAXYEAR")
+           "MINYEAR", "MAXYEAR", "UTC")
 
 
 import time as _time
@@ -2290,7 +2290,8 @@ class timezone(tzinfo):
             return f'UTC{sign}{hours:02d}:{minutes:02d}:{seconds:02d}'
         return f'UTC{sign}{hours:02d}:{minutes:02d}'
 
-timezone.utc = timezone._create(timedelta(0))
+UTC = timezone.utc = timezone._create(timedelta(0))
+
 # bpo-37642: These attributes are rounded to the nearest minute for backwards
 # compatibility, even though the constructor will accept a wider range of
 # values. This may change in the future.
index 335cded3b5fac6aaccc186c3bd681594196a3e41..d85b5466f7fc2842563a7272ce6bc04ca09686ee 100644 (file)
@@ -28,6 +28,7 @@ from datetime import timedelta
 from datetime import tzinfo
 from datetime import time
 from datetime import timezone
+from datetime import UTC
 from datetime import date, datetime
 import time as _time
 
@@ -66,6 +67,9 @@ class TestModule(unittest.TestCase):
         self.assertEqual(datetime.MINYEAR, 1)
         self.assertEqual(datetime.MAXYEAR, 9999)
 
+    def test_utc_alias(self):
+        self.assertIs(UTC, timezone.utc)
+
     def test_all(self):
         """Test that __all__ only points to valid attributes."""
         all_attrs = dir(datetime_module)
@@ -81,7 +85,7 @@ class TestModule(unittest.TestCase):
                     if not name.startswith('__') and not name.endswith('__'))
         allowed = set(['MAXYEAR', 'MINYEAR', 'date', 'datetime',
                        'datetime_CAPI', 'time', 'timedelta', 'timezone',
-                       'tzinfo', 'sys'])
+                       'tzinfo', 'UTC', 'sys'])
         self.assertEqual(names - allowed, set([]))
 
     def test_divide_and_round(self):
@@ -310,6 +314,7 @@ class TestTimeZone(unittest.TestCase):
 
     def test_tzname(self):
         self.assertEqual('UTC', timezone.utc.tzname(None))
+        self.assertEqual('UTC', UTC.tzname(None))
         self.assertEqual('UTC', timezone(ZERO).tzname(None))
         self.assertEqual('UTC-05:00', timezone(-5 * HOUR).tzname(None))
         self.assertEqual('UTC+09:30', timezone(9.5 * HOUR).tzname(None))
index 1efc6a07c6cada4d68ac8e8f45d6e80d4de9d5c7..ec4de61ff9273e54623aa226d1a59a6eaa4abce7 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -987,6 +987,7 @@ Toshio Kuratomi
 Ilia Kurenkov
 Vladimir Kushnir
 Erno Kuusela
+Kabir Kwatra
 Ross Lagerwall
 Cameron Laird
 Loïc Lajeanne
diff --git a/Misc/NEWS.d/next/Library/2022-04-26-18-02-44.gh-issue-91928.V0YveU.rst b/Misc/NEWS.d/next/Library/2022-04-26-18-02-44.gh-issue-91928.V0YveU.rst
new file mode 100644 (file)
index 0000000..35838c7
--- /dev/null
@@ -0,0 +1,3 @@
+Add `datetime.UTC` alias for `datetime.timezone.utc`.
+
+Patch by Kabir Kwatra.
index 24c2198893a379321017a9b823e5ec89da6b599f..20cdb1822ab964399a23439f0fd4906bf9311b5c 100644 (file)
@@ -6634,6 +6634,10 @@ _datetime_exec(PyObject *module)
         return -1;
     }
 
+    if (PyModule_AddObjectRef(module, "UTC", PyDateTime_TimeZone_UTC) < 0) {
+        return -1;
+    }
+
     /* A 4-year cycle has an extra leap day over what we'd get from
      * pasting together 4 single years.
      */