Tengo dos veces, una hora de inicio y una de parada, en el formato de 10:33:26 (HH: MM: SS). Necesito la diferencia entre las dos veces. He estado revisando la documentación de Python y buscando en línea, y me imagino que tendría algo que ver con los módulos de fecha y hora. No puedo hacer que funcione correctamente y sigo buscando solo cómo hacerlo cuando hay una cita involucrada.
En última instancia, necesito calcular los promedios de múltiples duraciones de tiempo. Tengo las diferencias horarias para trabajar y las estoy almacenando en una lista. Ahora necesito calcular el promedio. Estoy usando expresiones regulares para analizar los tiempos originales y luego hago las diferencias.
Para el promedio, ¿debo convertir a segundos y luego a la media?
fuente
Respuestas:
Sí, definitivamente
datetime
es lo que necesitas aquí. Específicamente, lastrptime
función, que analiza una cadena en un objeto de tiempo.Eso te da un
timedelta
objeto que contiene la diferencia entre las dos veces. Puede hacer lo que quiera con eso, por ejemplo, convertirlo en segundos o agregarlo a otrodatetime
.Esto devolverá un resultado negativo si la hora de finalización es anterior a la hora de inicio, por ejemplo,
s1 = 12:00:00
ys2 = 05:00:00
. Si desea que el código asuma que el intervalo cruza la medianoche en este caso (es decir, debe suponer que la hora de finalización nunca es anterior a la hora de inicio), puede agregar las siguientes líneas al código anterior:(Por supuesto, debe incluir en
from datetime import timedelta
alguna parte). Gracias a JF Sebastian por señalar este caso de uso.fuente
days= -2
y arriba en el objeto tdelta.days
nunca puede ser -2 o menos sin que haya información adicional (específicamente, fechas) más allá de lo que se describe en la pregunta. Entonces esa situación no es relevante aquí.tdelta.total_seconds()
.Pruebe esto: es eficiente para cronometrar eventos a corto plazo. Si algo lleva más de una hora, entonces la pantalla final probablemente querrá un formato amigable.
La diferencia de tiempo se devuelve como el número de segundos transcurridos.
fuente
time.monotonic()
en Python).time.time()
puede retroceder (p. ej., cuando cambia el tiempo en la máquina, incluidas las correcciones NTP).Aquí hay una solución que admite encontrar la diferencia, incluso si la hora de finalización es menor que la hora de inicio (durante el intervalo de medianoche) como
23:55:00-00:25:00
(media hora de duración):Salida
time_diff()
devuelve un objeto timedelta que puede pasar (como parte de la secuencia) a unamean()
función directamente, por ejemplo:El
mean()
resultado también es untimedelta()
objeto que puede convertir a segundos (td.total_seconds()
método (desde Python 2.7)), horas (td / timedelta(hours=1)
(Python 3)), etc.fuente
La estructura que representa la diferencia horaria en Python se llama timedelta . Si tiene
start_time
yend_time
comodatetime
tipos, puede calcular la diferencia utilizando un-
operador como:debe hacer esto antes de convertir a un formato de cadena particular (por ejemplo, antes de start_time.strftime (...)). En caso de que ya tenga una representación de cadena, debe convertirla nuevamente a hora / fecha y hora utilizando el método strptime .
fuente
Este sitio dice que intente:
Este foro utiliza time.mktime ()
fuente
Me gusta cómo lo hace este tipo: https://amalgjose.com/2015/02/19/python-code-for-calculating-the-difference-between-two-time-stamps . No estoy seguro si tiene algunas desventajas.
Pero se ve bien para mí :)
Con respecto a la pregunta que todavía necesita usar
datetime.strptime()
como otros dijeron antes.fuente
Prueba esto
SALIDA
fuente
resultado: 0 0 0 0 -47 -37
fuente
Ambos
time
ydatetime
tienen un componente de fecha.Normalmente, si solo está tratando con la parte del tiempo, proporcionaría una fecha predeterminada. Si solo está interesado en la diferencia y sabe que ambas horas son el mismo día, construya un
datetime
para cada una con el día establecido hoy y reste el inicio de la hora de finalización para obtener el intervalo (timedelta
).fuente
Eche un vistazo al módulo datetime y los objetos timedelta. Debes terminar construyendo un objeto datetime para las horas de inicio y finalización, y cuando las restas, obtienes una timedelta.
fuente
Conciso si solo está interesado en el tiempo transcurrido que es inferior a 24 horas. Puede formatear la salida según sea necesario en la declaración de devolución:
fuente