diff --git a/django/utils/http.py b/django/utils/http.py index cfd982fc01..78dfee7fee 100644 --- a/django/utils/http.py +++ b/django/utils/http.py @@ -1,8 +1,8 @@ import base64 -import datetime import re import unicodedata from binascii import Error as BinasciiError +from datetime import datetime, timezone from email.utils import formatdate from urllib.parse import quote, unquote from urllib.parse import urlencode as original_urlencode @@ -113,10 +113,9 @@ def parse_http_date(date): else: raise ValueError("%r is not in a valid HTTP date format" % date) try: - tz = datetime.timezone.utc year = int(m["year"]) if year < 100: - current_year = datetime.datetime.now(tz=tz).year + current_year = datetime.now(tz=timezone.utc).year current_century = current_year - (current_year % 100) if year - (current_year % 100) > 50: # year that appears to be more than 50 years in the future are @@ -129,7 +128,7 @@ def parse_http_date(date): hour = int(m["hour"]) min = int(m["min"]) sec = int(m["sec"]) - result = datetime.datetime(year, month, day, hour, min, sec, tzinfo=tz) + result = datetime(year, month, day, hour, min, sec, tzinfo=timezone.utc) return int(result.timestamp()) except Exception as exc: raise ValueError("%r is not a valid date" % date) from exc diff --git a/tests/utils_tests/test_http.py b/tests/utils_tests/test_http.py index 818c35e597..68df04696a 100644 --- a/tests/utils_tests/test_http.py +++ b/tests/utils_tests/test_http.py @@ -334,10 +334,9 @@ class HttpDateProcessingTests(unittest.TestCase): ) @unittest.skipIf(platform.architecture()[0] == "32bit", "The Year 2038 problem.") - @mock.patch("django.utils.http.datetime.datetime") + @mock.patch("django.utils.http.datetime") def test_parsing_rfc850(self, mocked_datetime): mocked_datetime.side_effect = datetime - mocked_datetime.now = mock.Mock() now_1 = datetime(2019, 11, 6, 8, 49, 37, tzinfo=timezone.utc) now_2 = datetime(2020, 11, 6, 8, 49, 37, tzinfo=timezone.utc) now_3 = datetime(2048, 11, 6, 8, 49, 37, tzinfo=timezone.utc)