Frage
Ich möchte, um herauszufinden, ob ein bestimmtes Python Datetime-Objekt ist älter als X Stunden oder Minuten. Ich versuche, etwas zu tun, ähnlich wie:
if (datetime.now() - self.timestamp) > 100
# Where 100 is either seconds or minutes
Dies erzeugt eine Art Fehler.
Was ist der richtige Weg, Datum Zeitvergleich in Python zu tun? Ich sah schon unter WorkingWithTime der Nähe, aber nicht genau das, was ich will. Ich nehme an, ich will nur das Datetime-Objekt in Sekunden dargestellt, so dass ich einen normalen int Vergleich tun können.
Bitte senden Sie Listen von Datetime-Best Practices.
Lösung
Mit der datetime.timedelta
Klasse:
>>> from datetime import datetime, timedelta
>>> then = datetime.now() - timedelta(hours = 2)
>>> now = datetime.now()
>>> (now - then) > timedelta(days = 1)
False
>>> (now - then) > timedelta(hours = 1)
True
Ihr Beispiel geschrieben werden als:
if (datetime.now() - self.timestamp) > timedelta(seconds = 100)
oder
if (datetime.now() - self.timestamp) > timedelta(minutes = 100)
Andere Tipps
Vergleichen Sie den Unterschied zu einem Timedelta, die Sie erstellen:
if datetime.datetime.now() - timestamp > datetime.timedelta(seconds = 5):
print 'older'
Alternative:
if (datetime.now() - self.timestamp).total_seconds() > 100:
Unter der Annahme, self.timestamp ist eine Datetime-Instanz
Sie können eine Kombination der ‚Tage‘ verwenden und ‚Sekunden‘ Attribute des zurückgegebenen Objekts, die Antwort herauszufinden, wie folgt aus:
def seconds_difference(stamp1, stamp2):
delta = stamp1 - stamp2
return 24*60*60*delta.days + delta.seconds + delta.microseconds/1000000.
Verwenden Sie abs () in der Antwort, wenn Sie immer eine positive Zahl von Sekunden werden sollen.
Um herauszufinden, wie viele Sekunden in die Vergangenheit ein Zeitstempel ist, können Sie es wie folgt verwendet werden:
if seconds_difference(datetime.datetime.now(), timestamp) < 100:
pass
Sie können subtrahieren zwei Datetime Objekte, um den Unterschied zwischen ihnen zu finden.
Sie können datetime.fromtimestamp
verwenden, um einen POSIX-Zeitstempel zu analysieren.
Wie so:
# self.timestamp should be a datetime object
if (datetime.now() - self.timestamp).seconds > 100:
print "object is over 100 seconds old"