2010-09-03 15 views
19

Ich muss den Zeitunterschied in Sekunden mit Python finden. Ich weiß, dass ich den Unterschied so bekommen kann:finden Zeitunterschied in Sekunden als Ganzzahl mit Python

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

Wie bekomme ich den Unterschied in den gesamten Sekunden?

Antwort

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

Dies ergibt eine „Typeerror: int() Argument muss ein String sein, ein Byte-ähnlichen Objekt oder eine Zahl, nicht‚datetime.timedelta‘“ Fehler in Python3. Siehe Robert Longsons Antwort. – typoerrpr

2

Wenn alles, was Sie brauchen eine Zeitspanne zu messen, können Sie time.time() Funktion verwenden, die Sekunden seit der Epoche als Gleitkommazahl zurück.

+0

cool, wie erstelle ich ein Datetime-Objekt mit dem Gleitkomma in Sekunden, um es schön zu drucken? – Richard

+0

Sprechen Sie über Zeitunterschied oder absolute Zeit? Letzterer kann mit 'time.localtime()' oder 'time.gmtime()' aus der rohen Anzahl von Sekunden in time struct (mit Feldern für year, month usw.) konvertiert und dann entweder mit 'time.asctime () '/' 'time.strftime()' oder verwendet, um das 'datetime.datetime' Objekt zu konstruieren. Ich bin mir nicht sicher, ob es irgendeine Funktion in der Python-Standardbibliothek gibt, um den Zeitunterschied gut zu zerlegen/auszudrucken (obwohl dies eine viel einfachere Aufgabe als die korrekte Darstellung der absoluten Zeit ist). – rkhayrov

6

total_seconds Die Methode wird die Differenz zurück, einschließlich der Bruchteil.

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

Sie können das über int() in eine ganze Zahl konvertieren, wenn Sie

+1

Ich bekomme 'AttributError: 'float' Objekt hat kein Attribut 'total_seconds'' –

2

bis die Bedingungen des Timedelta-Tupel mit ausreichender Multiplikatoren hinzufügen möchten, sollten Sie Ihre Antwort geben. 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 

Die Variable 'Diff' ist ein Objekt, das Timedelta ein Tupel von (Tage, Sekunden, Mikrosekunden) ist, wie hier https://docs.python.org/2.4/lib/datetime-timedelta.html im Detail erläutert. Alle anderen Einheiten (Stunden, Minuten ...) werden in dieses Format konvertiert.

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

Eine andere Möglichkeit, es zu betrachten von später jetzt (also eine positive Zeitdifferenz), wenn stattdessen wäre, Sie stattdessen eine negative Zeitdifferenz haben (früher jetzt), wobei die zwischen den beiden verstrichene Zeit immer noch die gleichen wie in dem früheren Beispiel

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

Daher, auch wenn wir sicher sind, die Dauer ist weniger als 1 Tag, ist es notwendig, den Tag Begriff zu berücksichtigen, da es ein wichtiger Begriff im Fall ist negative Zeitdifferenz