Domanda

Ho 2 valori temporali che hanno il tipo datetime.time.Voglio trovare la loro differenza.La cosa ovvia da fare è t1 - t2, ma non funziona.Funziona per oggetti di tipo datetime.datetime ma non per datetime.time.Allora qual è il modo migliore per farlo?

È stato utile?

Soluzione

Innanzitutto, tieni presente che datetime.time è un'ora del giorno, indipendente da un determinato giorno, quindi la differenza tra due valori datetime.time qualsiasi sarà inferiore a 24 ore.

Un approccio consiste nel convertire entrambi i valori datetime.time in valori comparabili (ad esempio millisecondi) e trovare la differenza.

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])

È un po' noioso, ma funziona.

Altri suggerimenti

Anche un po' sciocco, ma potresti provare a scegliere un giorno arbitrario e a incorporarlo ogni volta, utilizzando datetime.datetime.combine, quindi sottraendo:

>>> 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)

Potresti trasformarli entrambi in oggetti timedelta e sottrarli l'uno dall'altro, il che si occuperà dei riporti.Per esempio:

>>> 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

Gli oggetti timedelta negativi in ​​Python ottengono un campo giorno negativo, con gli altri campi positivi.Potresti verificare in anticipo:il confronto funziona sia su oggetti tempo che su oggetti timedelta:

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

Python ha pytz (http://pytz.sourceforge.net) modulo che può essere utilizzato per l'aritmetica degli oggetti 'tempo'.Si occupa anche degli offset dell'ora legale.La pagina sopra contiene una serie di esempi che illustrano l'utilizzo di pytz.

Sembra che questo non sia supportato, poiché non ci sarebbe un buon modo per gestire gli overflow in datetime.time.So che questa non è una risposta diretta, ma forse qualcuno con più esperienza di Python di me può andare un po' oltre.Per maggiori informazioni, vedere questo: http://bugs.python.org/issue3250

Recupera i tempi in millisecondi e poi fai la sottrazione.

Environment.TickCount sembra funzionare bene se hai bisogno di qualcosa di veloce.

int inizio = Environment.TickCount

...Fare qualcosa()

int tempo trascorso = Environment.TickCount - inizio

Jon

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top