declarar - ¿Cuál es la forma más simple de encontrar la diferencia entre 2 veces en python?



buscar valor en diccionario python (5)

Podrías transformar ambos en objetos timedelta y restarlos unos de otros, lo cual se ocupará 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 timedelta negativos en Python obtienen un campo de día negativo, con los otros campos positivos. Puede verificar de antemano: la comparación funciona tanto en objetos de tiempo como en objetos timedelta:

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

Tengo 2 valores de tiempo que tienen el tipo datetime.time . Quiero encontrar su diferencia. Lo más 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?


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

Un enfoque es convertir ambos valores de datetime.time 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 tonto, pero funciona.


También es un poco tonto, pero podrías tratar de elegir un día arbitrario e incrustarlo cada vez, usando datetime.datetime.combine y 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)

Python tiene el módulo pytz ( http://pytz.sourceforge.net ) que se puede usar para la aritmética de los objetos de 'tiempo'. También se ocupa de las compensaciones DST. La página de arriba tiene varios ejemplos que ilustran el uso de pytz.


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

int start = Environment.TickCount

...Hacer algo()

int elapsedtime = Environment.TickCount - start

Jon





time