¿Cuál es la forma más sencilla de encontrar la diferencia entre 2 tiempos en Python?

StackOverflow https://stackoverflow.com/questions/51010

  •  09-06-2019
  •  | 
  •  

Pregunta

Tengo 2 valores de tiempo que tienen el tipo. datetime.time.Quiero encontrar su diferencia.Lo obvio es t1 - t2, pero esto no funciona.Funciona para objetos de tipo datetime.datetime pero no para datetime.time.Entonces, ¿cuál es la mejor manera de hacer esto?

¿Fue útil?

Solución

En primer lugar, tenga en cuenta que datetime.time es una hora del día, independiente de un día determinado, por lo que la diferencia entre dos valores de datetime.time cualesquiera será inferior a 24 horas.

Un enfoque es convertir ambos valores de fecha, hora y hora en valores comparables (como milisegundos) y encontrar la diferencia.

t1, t2 = datetime.time(...), datetime.time(...)

t1_ms = (t1.hour*60*60 + t1.minute*60 + t1.second)*1000 + t1.microsecond
t2_ms = (t2.hour*60*60 + t2.minute*60 + t2.second)*1000 + t2.microsecond

delta_ms = max([t1_ms, t2_ms]) - min([t1_ms, t2_ms])

Es un poco aburrido, pero funciona.

Otros consejos

También es un poco tonto, pero puedes intentar elegir un día arbitrario e incrustarlo cada vez, usando datetime.datetime.combine, luego restando:

>>> import datetime
>>> t1 = datetime.time(2,3,4)
>>> t2 = datetime.time(18,20,59)
>>> dummydate = datetime.date(2000,1,1)
>>> datetime.datetime.combine(dummydate,t2) - datetime.datetime.combine(dummydate,t1)
datetime.timedelta(0, 58675)

Podrías transformar ambos en objetos delta de tiempo y restarlos entre sí, lo que se hará cargo de las prórrogas.Por ejemplo:

>>> import datetime as dt
>>> t1 = dt.time(23, 5, 5, 5)
>>> t2 = dt.time(10, 5, 5, 5)
>>> dt1 = dt.timedelta(hours=t1.hour, minutes=t1.minute, seconds=t1.second, microseconds=t1.microsecond)
>>> dt2 = dt.timedelta(hours=t2.hour, minutes=t2.minute, seconds=t2.second, microseconds=t2.microsecond)
>>>  print(dt1-dt2)
13:00:00
>>> print(dt2-dt1)
-1 day, 11:00:00
>>> print(abs(dt2-dt1))
13:00:00

Los objetos delta de tiempo negativos en Python obtienen un campo de día negativo, y los demás campos son positivos.Podrías comprobarlo previamente:La comparación funciona tanto en objetos de tiempo como en objetos de delta de tiempo:

>>> dt2 < dt1
True
>>> t2 < t1
True

Python tiene pytz (http://pytz.sourceforge.net) módulo que se puede utilizar para la aritmética de objetos de 'tiempo'.También se encarga de las compensaciones del horario de verano.La página anterior tiene varios ejemplos que ilustran el uso de pytz.

Parece que esto no es compatible, ya que no habría una buena manera de lidiar con los desbordamientos en datetime.time.Sé que esta no es una respuesta directa, pero tal vez alguien con más experiencia en Python que yo pueda llevar esto un poco más allá.Para obtener más información, consulte esto: http://bugs.python.org/issue3250

Recupera los tiempos en milisegundos y luego haz la resta.

Environment.TickCount parece funcionar bien si necesitas algo rápido.

int inicio = Entorno.TickCount

...Hacer algo()

int tiempo transcurrido = Environment.TickCount - inicio

jon

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top