2008-09-09 18 views

Respuesta

-2

En primer lugar, cabe destacar que un datetime.time es un momento del día, independiente de un día determinado, por lo que la diferencia entre dos cualesquiera de fecha y hora .los valores de tiempo van a ser menos de 24 horas.

Un enfoque consiste en 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.

+0

Tenga en cuenta que esta solución no conserva el signo. Además, delta_ms = abs (t1_ms - t2_ms) es un poco más fácil de entender y guarda al menos una resta. –

+2

no funciona si t1_ms es antes de la medianoche y t2_ms es después de la medianoche –

+0

¿No debería ser * 1000000? Desde 1 s = 1000000 μs. – Paggas

1

Parece que esto no es compatible, ya que no habría una buena manera de manejar 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

5

Puede transformar ambos en timedelta objects y restarlos entre sí, lo que 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 

negativos objetos timedelta en Python consiguen un campo negativo día, con los otros campos positivos. Se podría comprobar de antemano: comparación funciona tanto en objetos y objetos en tiempo timedelta:

>>> dt2 < dt1 
True 
>>> t2 < t1 
True 
+2

chryss: Usted podría hacer seriamente bien con un ejemplo aquí. – Arafangion

16

también un poco tonto, pero usted podría intentar recoger un día arbitraria e incrustación cada vez en ella, 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) 
3

Python tiene (http://pytz.sourceforge.net) Módulo pytz que puede ser utilizado para la aritmética de 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.

+0

no tiene sentido hablar de husos horarios sabiendo solo el tiempo sin especificar * fecha * también. Si conoce tanto la fecha como la hora, entonces [se pueden usar varias definiciones para una diferencia] (http://stackoverflow.com/a/25427822/4279) – jfs

-1

Recupere los tiempos en milisegundos y luego realice la resta.

-3

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

inicio int = Environment.TickCount

... HacerAlgo()

int ElapsedTime = Environment.TickCount - empezar

Jon

Cuestiones relacionadas