propiedades - diccionario python value
¿Cuál es la forma más simple de encontrar la diferencia entre 2 veces en python? (7)
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?
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
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.
Parece que esto no es compatible, ya que no habría una buena forma 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
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.
Recupere los tiempos en milisegundos y luego haga la resta.
Environment.TickCount parece funcionar bien si necesita algo rápido.
int start = Environment.TickCount
...Hacer algo()
int elapsedtime = Environment.TickCount - start
Jon