Pregunta

Me gustaría saber si un objeto particular de fecha y hora de Python es anterior a X horas o minutos. Estoy tratando de hacer algo similar a:

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

Esto genera un error de tipo.

¿Cuál es la forma correcta de hacer una comparación de fecha y hora en Python? Ya miré WorkingWithTime que está cerca pero no exactamente lo que quiero. Supongo que solo quiero que el objeto datetime esté representado en segundos para poder hacer una comparación int normal.

Publique listas de las mejores prácticas de fecha y hora.

¿Fue útil?

Solución

Utilice la clase 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

Su ejemplo podría escribirse como:

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

o

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

Otros consejos

Compare la diferencia con un timedelta que cree:

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

Alternativa:

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

Suponiendo que self.timestamp es una instancia de fecha y hora

Puede usar una combinación de los atributos 'días' y 'segundos' del objeto devuelto para encontrar la respuesta, así:

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

Use abs () en la respuesta si siempre desea un número positivo de segundos.

Para descubrir cuántos segundos en el pasado es una marca de tiempo, puede usarla así:

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

Puede restar dos datetime para encontrar la diferencia entre ellos.
Puede usar datetime.fromtimestamp para analizar una marca de tiempo POSIX.

Me gusta así:

# self.timestamp should be a datetime object
if (datetime.now() - self.timestamp).seconds > 100:
    print "object is over 100 seconds old"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top