django 1.4 timezone.now () vs datetime.datetime.teraz()
Jestem trochę zdezorientowany przez obsługę daylight savings
Settings.py:
TIME_ZONE = 'Europe/London'
USE_TZ = True
W powłoce django:
>>> from django.utils import timezone
>>> import datetime
>>> print timezone.now()
2012-05-28 11:19:42.897000+00:00
>>> print timezone.make_aware(datetime.datetime.now(),timezone.get_default_timez
one())
2012-05-28 12:20:03.224000+01:00
Dlaczego nie są takie same w odniesieniu do czasu letniego? Obie powinny być świadome, prawda?
Czytałem dokumenty, ale nie jestem mądrzejszy.3 answers
Według timezone.now()
:
def now():
"""
Returns an aware or naive datetime.datetime, depending on settings.USE_TZ.
"""
if settings.USE_TZ:
# timeit shows that datetime.now(tz=utc) is 24% slower
return datetime.utcnow().replace(tzinfo=utc)
else:
return datetime.now()
Opiera się na utc
zamiast domyślnej strefy czasowej. Możesz osiągnąć tę samą wartość używając
now = timezone.make_aware(datetime.datetime.now(),timezone.get_default_timezone())
print now.astimezone(timezone.utc)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-14 06:50:14
Od Django 1.11 możesz po prostu wywołać django.utils.timezone.localtime
aby pobrać datetime
dla domyślnej strefy czasowej.
>>> from django.utils import timezone
>>> timezone.localtime()
From docs:
Konwertuje świadomą datetime do innej strefy czasowej, domyślnie bieżącej strefy czasowej.
Gdy wartość jest pominięta, domyślnie wynosi
now()
.Ta funkcja nie działa na naiwnych datach; użyj
make_aware()
zamiast tego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-20 21:13:50
from datetime import datetime
from django.utils import timezone
def now():
try:
return timezone.localtime(timezone.now()).strftime('%Y-%m-%dT%H:%M:%S')
except Exception as exp:
print('TimeZone is not set - {}'.format(exp))
return datetime.now().strftime('%Y-%m-%dT%H:%M:%S')
Jeśli ustawisz TIME_ZONE = 'Europe/London'
i USE_TZ = True
w ustawieniu Django, umieścisz w sekcji try
, a w sekcji except
.
[Uwaga]:
-
.strftime()
jest opcją - te przetestowane na
Python 2.7
iDjango 1.11
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-20 09:05:56