2010-09-03 11 views

Odpowiedz

22
import time 
now = time.time() 
... 
later = time.time() 
difference = int(later - now) 
+1

Daje to argument "TypeError: int() musi być łańcuchem, obiektem podobnym do bajtów lub liczbą, a nie błędem" datetime.timedelta "" w Pythonie3. Zobacz odpowiedź Roberta Longsona. – typoerrpr

2

Jeśli wszystko, co potrzebne jest do pomiaru przedział czasowy, można użyć funkcji, która zwraca time.time() sekund od Epoki jako liczbę zmiennoprzecinkową.

+0

fajne, jak utworzyć obiekt datetime z punktem zmiennoprzecinkowym w ciągu sekund, aby go ładnie wydrukować? – Richard

+0

Czy mówisz o różnicy czasu lub czasie absolutnym? Ten ostatni można przekształcić z nieprzetworzonej liczby sekund do struktury struct (z polami roku, miesiąca itp.) Za pomocą 'time.localtime()' lub 'time.gmtime()', a następnie przekonwertować na ciąg znaków za pomocą 'time.asctime () '/ ''time.strftime()' lub użyte do skonstruowania obiektu 'datetime.datetime'. Nie jestem pewien, czy istnieje jakaś funkcja w standardowej bibliotece Pythona, aby ładnie rozłożyć/wydrukować różnicę czasu (chociaż jest to znacznie łatwiejsze zadanie niż poprawna reprezentacja bezwzględnego czasu). – rkhayrov

6

Metoda total_seconds zwróci różnicę, łącznie z częścią ułamkową.

from datetime import datetime 
now = datetime.now() 
... 
later = datetime.now() 
difference = (later - now).total_seconds() 

można przekonwertować na liczbę całkowitą przez int(), jeśli chcesz

+1

Otrzymuję obiekt 'AttributeError: 'float' nie ma atrybutu" total_seconds "' –

2

sumowaniu względem krotki timedelta z odpowiednich mnożników powinny dać odpowiedź. diff.days*24*60*60 + difference.seconds

from datetime import datetime 
now = datetime.now() 
... 
later = datetime.now() 
diff = later-now 
diff_in_seconds = diff.days*24*60*60 + diff.seconds 

Zmienna „edycja” jest obiektem timedelta który jest krotką (dni, sekundy mikrosekund), jak wyjaśniono szczegółowo https://docs.python.org/2.4/lib/datetime-timedelta.html. Wszystkie pozostałe jednostki (godziny, minuty ..) są konwertowane na ten format.

>> diff = later- now 
>> diff 
datetime.timedelta(0, 8526, 689000) 
>> diff_in_seconds = diff.days*24*60*60 + diff.seconds 
>> diff_in_seconds 
>> 8527 

Innym sposobem, aby spojrzeć na byłoby, gdyby zamiast później-teraz (zatem dodatnia różnica czasu), to zamiast mieć negatywny różnicy czasu (wcześniej-teraz), gdzie czas, jaki upłynął między nimi jest nadal takie same jak we wcześniejszym przykładzie

>> diff = earlier-now 
>> diff 
datetime.timedelta(-1, 77873, 311000) 
>> diff_in_seconds = diff.days*24*60*60 + diff.seconds 
>> diff_in_seconds 
>> -8527 

Stąd, nawet jeśli jesteśmy pewni, że czas trwania jest krótszy niż 1 dzień, to jest konieczne do podjęcia termin dzień pod uwagę, ponieważ jest to ważny termin w przypadku ujemna różnica czasu.

Powiązane problemy