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.

War es hilfreich?

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"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top