Domanda

Vorrei scoprire se un particolare oggetto datetime python è più vecchio di X ore o minuti. Sto cercando di fare qualcosa di simile a:

if (datetime.now() - self.timestamp) > 100
# Where 100 is either seconds or minutes

Questo genera un errore di tipo.

Qual è il modo corretto di fare il confronto di data e ora in Python? Ho già guardato WorkingWithTime che è vicino ma non esattamente quello che voglio. Presumo che voglio solo l'oggetto datetime rappresentato in pochi secondi in modo da poter fare un normale confronto int.

Si prega di pubblicare elenchi delle migliori pratiche di datetime.

È stato utile?

Soluzione

Utilizza la classe datetime.timedelta :

>>> 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

Il tuo esempio potrebbe essere scritto come:

if (datetime.now() - self.timestamp) > timedelta(seconds = 100)

o

if (datetime.now() - self.timestamp) > timedelta(minutes = 100)

Altri suggerimenti

Confronta la differenza con un timedelta che crei:

if datetime.datetime.now() - timestamp > datetime.timedelta(seconds = 5):
    print 'older'

Alternativa:

if (datetime.now() - self.timestamp).total_seconds() > 100:

Supponendo self.timestamp è un'istanza di data / ora

Puoi usare una combinazione degli attributi 'giorni' e 'secondi' dell'oggetto restituito per capire la risposta, in questo modo:

def seconds_difference(stamp1, stamp2):
    delta = stamp1 - stamp2
    return 24*60*60*delta.days + delta.seconds + delta.microseconds/1000000.

Usa abs () nella risposta se vuoi sempre un numero positivo di secondi.

Per scoprire quanti secondi nel passato è un timestamp, puoi usarlo in questo modo:

if seconds_difference(datetime.datetime.now(), timestamp) < 100:
     pass

Puoi sottrarre due datetime per trovare la differenza tra di loro.
Puoi utilizzare datetime.fromtimestamp per analizzare un timestamp POSIX.

In questo modo:

# self.timestamp should be a datetime object
if (datetime.now() - self.timestamp).seconds > 100:
    print "object is over 100 seconds old"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top