2013-08-27 9 views
17

हटाएं मैं औसत समय की गणना करता हूं और मैं परिणामस्वरूप औसत को माइक्रोसेकंड के बिना प्रदर्शित करना चाहता हूं।पायथन टाइमडेल्टा माइक्रोसेकंड

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

धन्यवाद

+0

timedeltas की एक सूची क्या है 'datetimes' ...? यदि ऐसा है, तो योग microseconds सहित timedelta ऑब्जेक्ट देता है ... तो समस्या क्या है? – tdelaney

+0

'avg.strftime ("% वाई-% एम-% डी% एच:% एम:% एस ")', लेकिन यह स्ट्रिंग वापस करेगा। –

उत्तर

19

timedetla ले लो और अपने स्वयं के माइक्रोसेकंड, माइक्रोसेकंड के रूप में विशेषता को हटाने और केवल पढ़ने के लिए:

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

आप अपनी खुद की छोटी सी समारोह कर सकते हैं अगर यह एक आवर्ती की जरूरत है:

import datetime 

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

मुझे एक बेहतर समाधान नहीं मिला है।

+5

जहां तक ​​मैं कह सकता हूं, यह 'माइक्रोसॉन्ड' होना चाहिए। – daviewales

+0

यह 'microseconds' होना चाहिए। सबूत [यहां] (http://pastebin.com/P4qH1G51) –

+1

यह टाइमेडेलटा ऑब्जेक्ट्स पर 'माइक्रोसॉन्ड' है, लेकिन समय और डेटाटाइम ऑब्जेक्ट्स पर 'माइक्रोसॉन्ड' है। –

12

यह सिर्फ प्रदर्शन के लिए, इस विचार से काम करता है है, तो:

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

विचार लेने के लिए केवल किस बिंदु से पहले है। यह 01:23:45 वापस आ जाएगी लिए 01: 23: 45,1235

2

एक और विकल्प, यह देखते हुए timedetla आप कर सकते हैं:

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

आप math.round() या math.floor() साथ math.ceil() जगह ले सकता है, दशा पर निर्भर करता है।

3

तुम इतनी तरह datetimes के तत्वों को संशोधित कर सकते हैं:

In [1]: datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) 
Out[1]: datetime.datetime(2017, 4, 28, 0, 0) 
संबंधित मुद्दे