[2.1.x] Fixed #29514 -- Reverted "Used datetime.timezone.utc instead of pytz.utc for better performance."
This reverts commit27ca5ce19f
due to a regression. Backport of2ec151e35d
from master
This commit is contained in:
parent
1084bcc4b7
commit
3a6040246f
|
@ -59,7 +59,10 @@ class SessionStore(SessionBase):
|
||||||
Return the modification time of the file storing the session's content.
|
Return the modification time of the file storing the session's content.
|
||||||
"""
|
"""
|
||||||
modification = os.stat(self._key_to_file()).st_mtime
|
modification = os.stat(self._key_to_file()).st_mtime
|
||||||
return datetime.datetime.fromtimestamp(modification, timezone.utc if settings.USE_TZ else None)
|
if settings.USE_TZ:
|
||||||
|
modification = datetime.datetime.utcfromtimestamp(modification)
|
||||||
|
return modification.replace(tzinfo=timezone.utc)
|
||||||
|
return datetime.datetime.fromtimestamp(modification)
|
||||||
|
|
||||||
def _expiry_date(self, session_data):
|
def _expiry_date(self, session_data):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -336,7 +336,11 @@ class FileSystemStorage(Storage):
|
||||||
If timezone support is enabled, make an aware datetime object in UTC;
|
If timezone support is enabled, make an aware datetime object in UTC;
|
||||||
otherwise make a naive one in the local timezone.
|
otherwise make a naive one in the local timezone.
|
||||||
"""
|
"""
|
||||||
return datetime.fromtimestamp(ts, timezone.utc if settings.USE_TZ else None)
|
if settings.USE_TZ:
|
||||||
|
# Safe to use .replace() because UTC doesn't have DST
|
||||||
|
return datetime.utcfromtimestamp(ts).replace(tzinfo=timezone.utc)
|
||||||
|
else:
|
||||||
|
return datetime.fromtimestamp(ts)
|
||||||
|
|
||||||
def get_accessed_time(self, name):
|
def get_accessed_time(self, name):
|
||||||
return self._datetime_from_timestamp(os.path.getatime(self.path(name)))
|
return self._datetime_from_timestamp(os.path.getatime(self.path(name)))
|
||||||
|
|
|
@ -50,7 +50,7 @@ class DatetimeSerializer(BaseSerializer):
|
||||||
def serialize(self):
|
def serialize(self):
|
||||||
if self.value.tzinfo is not None and self.value.tzinfo != utc:
|
if self.value.tzinfo is not None and self.value.tzinfo != utc:
|
||||||
self.value = self.value.astimezone(utc)
|
self.value = self.value.astimezone(utc)
|
||||||
value_repr = repr(self.value).replace("datetime.timezone(datetime.timedelta(0), 'UTC')", 'utc')
|
value_repr = repr(self.value).replace("<UTC>", "utc")
|
||||||
if isinstance(self.value, datetime_safe.datetime):
|
if isinstance(self.value, datetime_safe.datetime):
|
||||||
value_repr = "datetime.%s" % value_repr
|
value_repr = "datetime.%s" % value_repr
|
||||||
imports = ["import datetime"]
|
imports = ["import datetime"]
|
||||||
|
|
|
@ -173,7 +173,8 @@ class SyndicationFeed:
|
||||||
if latest_date is None or item_date > latest_date:
|
if latest_date is None or item_date > latest_date:
|
||||||
latest_date = item_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:
|
class Enclosure:
|
||||||
|
|
|
@ -2,10 +2,9 @@
|
||||||
Timezone-related classes and functions.
|
Timezone-related classes and functions.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import datetime
|
|
||||||
import functools
|
import functools
|
||||||
from contextlib import ContextDecorator
|
from contextlib import ContextDecorator
|
||||||
from datetime import timedelta, tzinfo
|
from datetime import datetime, timedelta, tzinfo
|
||||||
from threading import local
|
from threading import local
|
||||||
|
|
||||||
import pytz
|
import pytz
|
||||||
|
@ -53,8 +52,7 @@ class FixedOffset(tzinfo):
|
||||||
|
|
||||||
|
|
||||||
# UTC time zone as a tzinfo instance.
|
# UTC time zone as a tzinfo instance.
|
||||||
# (Use utc = datetime.timezone.utc here when PY35 isn't supported.)
|
utc = pytz.utc
|
||||||
utc = datetime.timezone(ZERO, 'UTC')
|
|
||||||
|
|
||||||
|
|
||||||
def get_fixed_timezone(offset):
|
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.
|
This function is designed for use by the template engine.
|
||||||
"""
|
"""
|
||||||
should_convert = (
|
should_convert = (
|
||||||
isinstance(value, datetime.datetime) and
|
isinstance(value, datetime) and
|
||||||
(settings.USE_TZ if use_tz is None else use_tz) and
|
(settings.USE_TZ if use_tz is None else use_tz) and
|
||||||
not is_naive(value) and
|
not is_naive(value) and
|
||||||
getattr(value, 'convert_to_local_time', True)
|
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 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.
|
# By design, these four functions don't perform any checks on their arguments.
|
||||||
|
|
Loading…
Reference in New Issue