2013-08-27 10 views
17

Ich mache eine Berechnung der durchschnittlichen Zeit und ich möchte den Ergebnisdurchschnitt ohne Mikrosekunden anzeigen.Python timedelta entfernen Mikrosekunden

avg = sum(datetimes, datetime.timedelta(0))/len(datetimes) 

Dank

+0

Was Datetimes 'ist ... eine Liste von timedeltas? Wenn ja, gibt die Summe ein timedelta-Objekt einschließlich Mikrosekunden zurück ... Was ist das Problem? – tdelaney

+0

'avg.strftime ("% Y-% m-% d% H:% M:% S ")', aber es wird String zurückgegeben. –

Antwort

19

die timedetla nehmen und seine eigenen Mikrosekunden entfernen, als Mikrosekunden und read-only-Attribut:

avg = sum(datetimes, datetime.timedelta(0))/len(datetimes) 
avg = avg - datetime.timedelta(microseconds=avg.microseconds) 

Sie Ihre eigene kleine Funktion machen kann, wenn es sich um eine wiederkehrende Notwendigkeit ist:

import datetime 

def chop_microseconds(delta): 
    return delta - datetime.timedelta(microseconds=delta.microseconds) 

Ich habe keine bessere Lösung gefunden.

+5

Es sollte "Mikrosekunde" sein, soweit ich das beurteilen kann. – daviewales

+0

sollte es "Mikrosekunden" sein. Beweis [hier] (http://pastebin.com/P4qH1G51) –

+1

Es ist "Mikrosekunden" auf Timedelta-Objekte, aber "Mikrosekunde" auf Zeit und Datum-Zeit-Objekte. –

12

Wenn es nur für die Anzeige ist, diese Idee funktioniert:

avgString = str(avg).split(".")[0] 

Die Idee ist, nur zu nehmen, was vor dem Punkt ist. Es wird wieder 01.23.45 für 01: 23: 45,1235

2

eine weitere Option, da timedetla Sie tun können:

avg = datetime.timedelta(seconds=math.ceil(avg.total_seconds())) 

Sie die math.ceil() ersetzen kann, mit math.round() oder math.floor(), kommt auf die Situation an.

3

Sie können die Elemente von Datetimes wie so ändern:

In [1]: datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) 
Out[1]: datetime.datetime(2017, 4, 28, 0, 0)