Django datetimefield Zeitzone bekannt CET

8

Ich habe diesen Beitrag Is gesehen Django beschädigt timezone-aware DateTimeField beim Speichern in der Datenbank? , aber es verwendet speziell pytz und mysql und was nicht, wo ich nicht pytz benutze und SQLite (falls es eine Auswirkung haben könnte).

Ich habe das folgende Modell

%Vor%

Und ich füge Daten wie folgt ein:

%Vor%

Die print-Anweisungen geben mir die richtige Ausgabe, aber sobald ich in die Datenbank (SQLite) schaue, sehe ich 2016-01-10 23:00:00

Meine Django-Einstellungen sagen

%Vor%

Abrufen der Daten, die ich bekomme:

%Vor%

Warum speichert es die Daten in einem anderen Format, dann gebe ich an und warum, wenn Django auf Zeitzone eingestellt ist, bekomme ich eine UTC Zeitzone zurück? Ich meine vor dem Einfügen das Datetime-Objekt sagt: datetime.datetime(2016, 1, 11, 0, 0, tzinfo=<DstTzInfo 'CET' CET+1:00:00 STD>)

update -

Ich habe in der Zwischenzeit eine Arbeit gefunden, indem ich TIME_ZONE auf die Datenbank gesetzt habe, wie in der Django-Dokumentation hier . Das gibt mir die richtige Zeitzone / das richtige Datum in der Datenbank, aber gemäß dieser Dokumentation sollte ich es nicht brauchen, weil meine DB von Django

verwaltet wird
  

Dies ermöglicht die Interaktion mit Datenbanken von Drittanbietern, die Datumsangaben in Ortszeit und nicht in UTC speichern. Um Probleme im Zusammenhang mit Änderungen der Sommerzeit zu vermeiden, sollten Sie diese Option nicht für Datenbanken festlegen, die von Django verwaltet werden.

Es ist mir immer noch unklar, warum Django ein Datetime-Objekt mit einer CET-Zeitzone in UTC umwandelt, wenn es in der Datenbank gespeichert wird, aber nicht schlau genug ist, es beim Abrufen zurück in CET zu konvertieren .

    
ixje 29.01.2016, 12:05
quelle

1 Antwort

4

Django verwendet intern die UTC-Zeit. TIME_ZONE wird "für Ihre Ansichten und Modelle" verwendet ( Ссылка ) )

Du hast mit 2016-01-11 00:00 CET begonnen, was 2016-01-10 23:00 UTC ist! Ihre Datetime wurde korrekt in der Datenbank gespeichert und später wiederhergestellt, so dass alles wie erwartet funktioniert.

    
knite 02.02.2016, 08:20
quelle