Care este cel mai simplu mod de a găsi diferența între 2 ori în Python?

voturi
12

Am valori 2 de timp , care au tipul datetime.time. Vreau să găsesc diferența lor. Evident lucru de făcut este t1 - t2, dar acest lucru nu funcționează. Acesta funcționează pentru obiecte de tip , datetime.datetimedar nu pentru datetime.time. Deci , ce este cel mai bun mod de a face acest lucru?

Întrebat 08/09/2008 la 23:28
sursa de către utilizator
În alte limbi...                            


7 răspunsuri

voturi
1

Se pare că acest lucru nu este acceptat, deoarece nu ar fi o modalitate buna de a face cu deversari in datetime.time. Știu că acest lucru nu este un răspuns direct, dar poate cineva cu mai multă experiență Python decât mine poate lua acest lucru un pic mai departe. Pentru mai multe informații, a se vedea acest lucru: http://bugs.python.org/issue3250

Publicat 08/09/2008 la 23:37
sursa de către utilizator

voturi
5

Ai putea transforma atat in timedelta obiecte si scade acestea una de alta, care va avea grijă să de reportările. De exemplu:

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

obiecte timedelta negative în Python obține un câmp negativ zi, cu alte câmpuri pozitive. Ai putea verifica în prealabil: comparație funcționează pe ambele obiecte de timp și obiecte timedelta:

>>> dt2 < dt1
True
>>> t2 < t1
True
Publicat 08/09/2008 la 23:42
sursa de către utilizator

voturi
-1

În primul rând, rețineți că datetime.time este un moment al zilei, independent de o anumită zi, și așa mai departe diferit între oricare două valori datetime.time va fi mai puțin de 24 de ore.

O abordare este de a converti ambele valori datetime.time în valori comparabile (cum ar fi milisecunde), și pentru a găsi diferența.

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

E un pic șchiop, dar funcționează.

Publicat 08/09/2008 la 23:47
sursa de către utilizator

voturi
16

De asemenea , un pic prostesc, dar ai putea încerca alege o zi arbitrară și încorporarea de fiecare dată în ea, folosind datetime.datetime.combine, apoi scăzând:

>>> 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)
Publicat 08/09/2008 la 23:53
sursa de către utilizator

voturi
3

Python pytz ( http://pytz.sourceforge.net module) care pot fi folosite pentru aritmetică a obiectelor „timp“. Este nevoie de grija de decalaje de DST, de asemenea. Pagina de mai sus are un număr de exemple care ilustrează utilizarea pytz.

Publicat 20/09/2008 la 15:13
sursa de către utilizator

voturi
-1

Preluare de ori în milisecunde și apoi face scăderea.

Publicat 20/09/2008 la 15:16
sursa de către utilizator

voturi
-3

Environment.TickCount pare să funcționeze bine, dacă ai nevoie de ceva rapid.

int start = Environment.TickCount

...Fă ceva()

int elapsedtime = Environment.TickCount - Start

Jon

Publicat 04/11/2008 la 20:05
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more