Quiero comparar dos fechas y obtener la diferencia en segundos, como obtener los segundos entre una fecha límite y la fecha y hora actual, pero obtengo un resultado inesperado cuando el sustraendo es mayor que minuendo

import datetime    
deadline=datetime.datetime.strptime('2020-06-26 11:18:00','%Y-%m-%d %H:%M:%S')
current=datetime.datetime.strptime('2020-06-26 14:38:00','%Y-%m-%d %H:%M:%S')
result = (deadline - current).seconds #result is 74400

Si echas un vistazo, el día es el mismo para ambas fechas, solo cambia la parte de tiempo.

Si cambio el orden de la "resta" obtengo un resultado diferente:

result = (current - deadline).seconds #result is 12000

Esperaba algo así como un resultado negativo porque current es mayor que deadline, o al menos el valor de los mismos segundos no importa el orden de los operandos.

Me gustaría entender lo que está pasando. ¿Y hay alguna manera de obtener siempre el mismo resultado?

Versión: python 3.7

0
Juan Sebastian Cortes Torres 25 jun. 2020 a las 20:41

2 respuestas

La mejor respuesta

Deberá utilizar .total_seconds() si desea conocer el tiempo transcurrido en lugar del valor del lugar de "segundos" en el intervalo de tiempo.

En particular, la resta que produce 74400 representa un intervalo de tiempo de -12000 segundos como -1 día y +74400 segundos internamente. Para la otra resta, lo representa como +0 días y +12000 segundos, de ahí sus resultados de 74400 y 12000 para .seconds, respectivamente.

4
Hans Musgrave 25 jun. 2020 a las 18:00

Si está asumiendo que esto es un error en Python, no lo es. Lo que has presentado es un error. Porque así es como se representan los timedelta negativos en Python.

print (datetime.timedelta(seconds=-1).seconds)
# 86399

Porque los segundos en un timedelta se normalizan a una cantidad entre 0 y 86399.

Utilice .total_seconds() si desea un valor negativo.

result = (deadline - current).total_seconds()
print(result)
# -12000
2
Harshal Parekh 25 jun. 2020 a las 17:55