2017-04-19 5 views
0

verstehe ich eine harte Zeit, wie Zeitzonen in django funktioniert, so dass ich sah auf den Quellcode in django/utils/timezone.py und ich fand den folgenden Code:Django Zeitzone jetzt, was vermisse ich?

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

Und ich verstehe wirklich nicht, warum die vorgesehenen Tzinfo hängt nicht von TIME_ZONE von settings.py ab.

Sollte es nicht so sein?

return datetime.utcnow().replace(tzinfo=get_default_timezone()) 

Auf diese Weise wird timezone.now() wirklich Zeitzone bewusst sein, nicht wahr?

Antwort

1

Wenn USE_TZ aktiviert ist, speichert Django alle Datumsangaben in UTC und verwendet die Einstellung TIME_ZONE, um die gespeicherte Zeitzone anzuzeigen.

Von der Djangos timezone docs:

Wenn die Unterstützung für Zeitzonen aktiviert ist, Django speichert datetime Informationen in UTC in der Datenbank verwendet Zeitzone-aware Datetime Objekte intern und übersetzt sie in die Zeitzone des Endbenutzers in Vorlagen und Formularen.

+0

"Django speichert alle Datumsangaben in UTC". Das ist nicht präzise. Django doesn; t tue immer das –

+1

Danke für das Zeigen @MihaiZamfir. Ich habe die Antwort aktualisiert. – v1k45

+0

Aus dem Quellcode schien die UTC-Klasse wie ein Dummy "Return 0 Offset", aber ich denke, ich habe es jetzt, danke! – Nezo

Verwandte Themen