Datums- und Zeitstempel in Django nicht subtrahieren?

8

Ich habe ein Feld timestamp = models.DateTimeField (auto_now_add = True) in der db. Ich möchte den Unterschied zwischen diesem Zeitstempel und datetime.now () finden.

Wenn ich datetime.now () - timestamp ausprobiert habe, bekomme ich den Fehler:

%Vor%

Wie behebe ich das?

    
iCodeLikeImDrunk 15.05.2012, 04:52
quelle

2 Antworten

20

Dieser Fehler bezieht sich darauf, wie Zeiten von Python gespeichert werden. Laut der Python Dokumentation :

  

Es gibt zwei Arten von Datums- und Zeitobjekten: "naiv" und "bewusst". Diese Unterscheidung bezieht sich darauf, ob das Objekt eine Vorstellung von Zeitzone, Sommerzeit oder einer anderen Art von algorithmischer oder politischer Zeitanpassung hat.

In der django Dokumentation steht das auch :

  

Wenn die Zeitzonenunterstützung deaktiviert ist, verwendet Django naive Datetime-Objekte   in Ortszeit. Dies ist für viele Anwendungsfälle einfach und ausreichend. Im   Um in diesem Modus die aktuelle Zeit zu erhalten, würden Sie schreiben:

%Vor%
  

Wenn die Zeitzonenunterstützung aktiviert ist,   Django verwendet zeitzonenbewusste Datetime-Objekte. Wenn Ihr Code erstellt wird   Datetime-Objekte sollten sie ebenfalls beachten. In diesem Modus das Beispiel   oben wird:

%Vor%

Sie sollten bestimmen, ob Sie Zeitzonenbewusstsein auf Ihrer Site haben möchten und dann Ihre gespeicherten Zeiten entsprechend anpassen. Um ein bewusstes dt in naiv zu konvertieren, können Sie das pytz-Modul verwenden und dies tun:

%Vor%

Dies funktioniert, weil alle Python-Datumsangaben ein optionales Zeitzonenattribut, tzinfo , haben, das verwendet werden kann, um Informationen über den Offset des Dt von der UTC-Zeit zu speichern.

    
Cianan Sims 15.05.2012, 05:16
quelle
0

Holá
Die kurze Antwort lautet:

%Vor%

Sie müssen die Zeitzoneninfo zu Ihrer now () Zeit hinzufügen.
Aber Sie müssen die selbe Zeitzone der Variablen hinzufügen, deshalb lese ich zuerst das Attribut tzinfo.

    
ePi272314 03.10.2015 19:03
quelle