from - python datetime to timestamp
Comparaciones de Python Date (6)
Al igual que:
# self.timestamp should be a datetime object
if (datetime.now() - self.timestamp).seconds > 100:
print "object is over 100 seconds old"
Me gustaría saber si un objeto python datetime 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 he visto WorkingWithTime que está cerca, pero no exactamente lo que quiero. Supongo que solo quiero que el objeto datetime se represente en segundos para que pueda hacer una comparación int normal.
Por favor, publique listas de las mejores prácticas de datetime.
Alternativa:
if (datetime.now() - self.timestamp).total_seconds() > 100:
Suponiendo que self.timestamp es una instancia de fecha y hora
Compare la diferencia con un timedelta que crea:
if datetime.datetime.now() - timestamp > datetime.timedelta(seconds = 5):
print ''older''
Puede restar dos objetos de datetime para encontrar la diferencia entre ellos.
Puede usar datetime.fromtimestamp
para analizar una marca de tiempo POSIX.
Puede usar una combinación de los atributos ''días'' y ''segundos'' del objeto devuelto para descubrir la respuesta, como esta:
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 quiere una cantidad positiva 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
Use 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
Tu ejemplo podría escribirse como:
if (datetime.now() - self.timestamp) > timedelta(seconds = 100)
o
if (datetime.now() - self.timestamp) > timedelta(minutes = 100)