From 2ec151e35da93047acfeea1b79c27010f2cb8594 Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Thu, 28 Jun 2018 09:26:41 -0400 Subject: Fixed #29514 -- Reverted "Used datetime.timezone.utc instead of pytz.utc for better performance." This reverts commit 27ca5ce19f5f184018a61611c1bc319113b1d107 due to a regression. --- django/utils/feedgenerator.py | 3 ++- django/utils/timezone.py | 14 ++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) (limited to 'django/utils') diff --git a/django/utils/feedgenerator.py b/django/utils/feedgenerator.py index 319a017e8c..e49f534a19 100644 --- a/django/utils/feedgenerator.py +++ b/django/utils/feedgenerator.py @@ -173,7 +173,8 @@ class SyndicationFeed: if latest_date is None or item_date > latest_date: latest_date = item_date - return latest_date or datetime.datetime.now(utc) + # datetime.now(tz=utc) is slower, as documented in django.utils.timezone.now + return latest_date or datetime.datetime.utcnow().replace(tzinfo=utc) class Enclosure: diff --git a/django/utils/timezone.py b/django/utils/timezone.py index 9870cd03a9..c1f0d70bc1 100644 --- a/django/utils/timezone.py +++ b/django/utils/timezone.py @@ -2,10 +2,9 @@ Timezone-related classes and functions. """ -import datetime import functools from contextlib import ContextDecorator -from datetime import timedelta, tzinfo +from datetime import datetime, timedelta, tzinfo from threading import local import pytz @@ -53,8 +52,7 @@ class FixedOffset(tzinfo): # UTC time zone as a tzinfo instance. -# (Use utc = datetime.timezone.utc here when PY35 isn't supported.) -utc = datetime.timezone(ZERO, 'UTC') +utc = pytz.utc def get_fixed_timezone(offset): @@ -174,7 +172,7 @@ def template_localtime(value, use_tz=None): This function is designed for use by the template engine. """ should_convert = ( - isinstance(value, datetime.datetime) and + isinstance(value, datetime) and (settings.USE_TZ if use_tz is None else use_tz) and not is_naive(value) and getattr(value, 'convert_to_local_time', True) @@ -221,7 +219,11 @@ def now(): """ Return an aware or naive datetime.datetime, depending on settings.USE_TZ. """ - return datetime.datetime.now(utc if settings.USE_TZ else None) + if settings.USE_TZ: + # timeit shows that datetime.now(tz=utc) is 24% slower + return datetime.utcnow().replace(tzinfo=utc) + else: + return datetime.now() # By design, these four functions don't perform any checks on their arguments. -- cgit v1.3