Django: Wie bekommt man einen Zeit Unterschied von der Zeit post?
Sagen, dass ich eine Klasse im Modell
class Post(models.Model):
time_posted = models.DateTimeField(auto_now_add=True, blank=True)
def get_time_diff(self):
timediff = timediff = datetime.datetime.now() - self.time_posted
print timediff # this line is never executed
return timediff
Definierte ich ein get_time_diff, um die Zeitdifferenz von dem Zeitpunkt, wenn der Beitrag gepostet ist, bis jetzt, laut dem Dokument, die DateTimeField sollte in der Lage sein, um umgewandelt werden zu datetime automatisch, ist das richtig? Warum die print-Anweisung wird nie ausgeführt wird? Wie können Sie extrahieren Sie die Zeit Unterschied?
Neben, wenn Sie eine Zeitdifferenz, gibt es eine einfache Möglichkeit, konvertieren Sie die Zeitdifferenz, um eine ganze Zahl, wie die Anzahl der Sekunden von der Gesamtzeit.
Das ist alt, aber ich bemerkte niemand Ihre Frage beantwortet zu drucken. Ihre print-Anweisung ist wahrscheinlich zu arbeiten, aber Sie werden nicht sehen, es auf Ihrer Website. drucken funktioniert nur in der Konsole. Wenn Sie einen Blick auf Ihre Protokolle finden Sie Ihre print-message.
InformationsquelleAutor dorafmon | 2013-04-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein code ist bereits in Arbeit; ein
datetime.timedelta
Objekt zurückgegeben.Die Gesamtzahl der Sekunden stattdessen müssen Sie rufen Sie die
.total_seconds()
Methode auf die daraus resultierendentimedelta
:.total_seconds()
gibt einefloat
Wert, einschließlich Mikrosekunden.Beachten Sie, dass Sie benötigen, um ein timezone bewusst
datetime
Objekt, da die DjangoDateTimeField
Griffe timezone bewusstdatetime
Objekte. Sehen Django Zeitzonen-Dokumentation.Demonstration
.total_seconds()
(mit naivendatetime
Objekte, aber die Prinzipien sind die gleichen):Da beide Objekte sind timezone bewusst (
.tzinfo
Attribut, das nichtNone
), Berechnungen zwischen Ihnen kümmern Zeitzonen und subtrahieren von eins von dem anderen machen Sie das richtige, wenn es darum geht, unter Berücksichtigung der Zeitzonen, der entweder über das Objekt.total_seconds()
Methode. 🙂Dank erstmal, aber in meinem Fall die time_posted ist ein DateTimeField. Ich habe versucht, es funktioniert nicht.
in Ihrem benutzerdefinierten Modell-Methode
self.time_posted
gibt einedatetime
- Instanz finden Sie unter Modell-Methoden.die
blank=True
legt nahe, dass Sie möglicherweise nicht um eine gültigedatetime
zurück, so dass Sie haben können, um Ihre Gültigkeit zu überprüfen, bevor Sie den Abzug.Durch Aufkleben auf UTC sparen Sie sich all diese Kopfschmerzen.
InformationsquelleAutor Martijn Pieters
Vorausgesetzt, Sie tun dies innerhalb einer Vorlage können Sie auch nutzen, die timesince template-tag.
Beispiel:
InformationsquelleAutor Wolph
Ihren code
sollte arbeiten, um die Zeit Unterschied. Allerdings, dies gibt
timedelta
Objekt. Man Unterschied in Sekunden, die Sie verwenden.seconds
AttributIch denke, es wird. Wissen Sie, warum es nicht?
Gut, docs sagen, dass die
seconds
Attribut "Zwischen 0 und 86399 inclusive".Es gibt eine separate
.days
Attribut..seconds
enthält nur den Rest, eine Veranstaltung von 10 Tagen und 534 Sekunden Zeit hat ein.seconds
Attribut mit534
, und es ist.days
Attribut10
. Verwenden.total_seconds()
zu drehen, die in ein-Sekunden-only-Wert.InformationsquelleAutor Rohan