es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Fecha y hora deducidas de forma errónea.

Declaración del problema

Parece que hay un error en el módulo datetime de python, el siguiente snippet de código debería ser autoexplicativo:

import datetime

dep = datetime.datetime(2021, 9, 11, 7, 25)
arr = datetime.datetime(2021, 9, 11, 12, 35)

print(f"esperado: -5h10m, real: {dep - arr}")
print(f"esperado: 5h10m, real: {arr - dep}")

Lo que obtengo con python 3.10:

esperado: -5h10m, real: -1 día, 18:50:00
esperado: 5h10m, real: 5:10:00

Pregunta

¿Es un error o una funcionalidad? Si es un error, ¿qué puedo hacer para solucionarlo?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Basado en el código provisto y la salida esperada vs. real, parece haber un error en el módulo datetime de Python. La salida esperada muestra una diferencia de tiempo de 5 horas y 10 minutos entre los dos objetos datetime, mientras que la salida real muestra una diferencia de -5 horas y 10 minutos para la primera declaración de impresión y 5 horas y 10 minutos para la segunda declaración de impresión.

    Para solucionar el error, puedes usar la función timedelta del módulo datetime. Con timedelta puedes calcular fácilmente la diferencia entre dos objetos datetime mientras se tiene en cuenta la zona horaria y el horario de verano.

    Aquí hay un fragmento de código actualizado que usa timedelta para calcular la diferencia de tiempo:

    import datetime 
    
    dep = datetime.datetime(2021, 9, 11, 7, 25)
    arr = datetime.datetime(2021, 9, 11, 12, 35)
    
    diff = dep - arr
    print(f"esperado: -5h10m, real: {diff}")
    print(f"esperado: 5h10m, real: {-diff}")
    

    En este código actualizado, se usa timedelta para calcular la diferencia de tiempo entre dep y arr. La variable diff almacena la diferencia de tiempo como un objeto timedelta, que se puede formatear e imprimir fácilmente.

    Con este código actualizado, la salida debería mostrar correctamente una diferencia de tiempo de -5 horas y 10 minutos para la primera declaración de impresión y 5 horas y 10 minutos para la segunda declaración de impresión.

Comments are closed.