/ / django 1.4 timezone.now () vs datetime.datetime.now () - django, Zeitzone

django 1.4 timezone.now () vs datetime.datetime.now () - django, Zeitzone

Ich bin etwas verwirrt wegen der Handhabung von Sommerzeit

settings.py:

TIME_ZONE = "Europe/London"
USE_TZ = True

in der Django-Schale:

>>> 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

Warum sind sie nicht in Bezug auf die Sommerzeit identisch? Beide sollten sich bewusst sein, nein?

Ich habe die Dokumente gelesen, bin aber nicht klüger.

Antworten:

54 für die Antwort № 1

Gemäß 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()

Es basiert auf utc anstelle Ihrer Standardzeitzone. Sie können denselben Wert erreichen, indem Sie verwenden

now = timezone.make_aware(datetime.datetime.now(),timezone.get_default_timezone())
print now.astimezone(timezone.utc)

5 für die Antwort № 2

Seit Django 1.11 kannst du einfach anrufen django.utils.timezone.localtime holen datetime für Ihre Standardzeitzone.

>>> from django.utils import timezone
>>> timezone.localtime()

Aus der Dokumentation:

Konvertiert ein bekanntes Datum in eine andere Zeitzone, standardmäßig die aktuelle Zeitzone.

Wenn der Wert weggelassen wird, wird standardmäßig der Wert verwendet now().

Diese Funktion funktioniert nicht bei naiven Datumsangaben; benutzen make_aware() stattdessen.


0 für die Antwort № 3
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")

Wenn Sie einstellen TIME_ZONE = "Europe/London" und USE_TZ = True In Django werden Sie in der try Abschnitt und sonst, in der except Sektion.


[HINWEIS]:

  • .strftime() ist eine Option
  • Diese wurden getestet Python 2.7 und Django 1.11