2012-05-24 13 views
8

मुझे पता है कि timedelta समारोह के साथ एच के सेकंड में बदल सकते हैं कर रहा हूँ करने के लिए है की तरह कुछ का उपयोग कर रहा है:अजगर समय रूपांतरण ज: मी: मी:: सेकंड

>> import datetime 
>> str(datetime.timedelta(seconds=666)) 
'0:11:06' 

लेकिन मैं ज बदलने की आवश्यकता: मीटर : सेकंड से सेकंड, या मिनट।

क्या आप एक ऐसा कार्य जानते हैं जो ऐसा कर सकता है?

+0

आपका स्रोत इनपुट क्या है? एक टाइमस्टैम्प स्ट्रिंग? कुछ प्रकार की वस्तु? –

+0

क्या आपको युग के बाद से सेकंड या मिनट का मतलब है? या आप बस टाइमस्टैंप से सेकंड और मिनट के हिस्सों को निकालना चाहते हैं? – Michael

+0

संभावित डुप्लिकेट: http://stackoverflow.com/questions/10049805/add-values-of-0212-0345-from-a-list-together-to-make-a-format-time-hours – jadkik94

उत्तर

12
def hms_to_seconds(t): 
    h, m, s = [int(i) for i in t.split(':')] 
    return 3600*h + 60*m + s 
+1

अच्छा और सरल, हालांकि मुझे लगता है कि आप 'datetime.timedelta (सेकंड = 3600 * एच +60 * एम + एस) वापस करना चाहते हैं। –

1

दुर्भाग्यवश, का उपयोग कर स्ट्रिंग से datetime ऑब्जेक्ट बनाने के रूप में यह छोटा नहीं है। इस प्रश्न को पहले स्टैक ओवरफ़्लो पर यहां पूछा गया है: How to construct a timedelta object from a simple string, जहां समाधान python-dateutil का उपयोग करके शामिल था। http://kbyanc.blogspot.ca/2007/08/python-reconstructing-timedeltas-from.html

12
>>> import time, datetime 
>>> a = time.strptime("00:11:06", "%H:%M:%S") 
>>> datetime.timedelta(hours=a.tm_hour, minutes=a.tm_min, seconds=a.tm_sec).seconds 
666 

यहाँ और एक मुखर एक लाइनर यदि आप है:

वैकल्पिक रूप से, यदि आप किसी अन्य मॉड्यूल जोड़ने के लिए नहीं करना चाहते हैं, यहाँ एक वर्ग आप एक स्ट्रिंग से एक timedelta पार्स करने के लिए उपयोग कर सकते हैं 'फिर से वास्तव में अधिक बंटवारे पर आमादा ":"

>>> s = "00:11:06" 
>>> sum(int(i) * 60**index for index, i in enumerate(s.split(":")[::-1])) 
666 
+3

ध्यान दें कि यह विफल रहता है यदि घंटों की संख्या 23 से अधिक हो जाती है। –

+1

@ ब्रेंडनवुड अधिक आम तौर पर, यह विफल रहता है अगर स्ट्रिंग 'स्ट्रिपटाइम' में पारित स्ट्रिंग वैध समय नहीं है। स्पष्टीकरण के लिए –

+0

धन्यवाद। –

0

यह 2.6.4 में काम करता है:

hours, minutes, seconds = [int(_) for _ in thestring.split(':')] 

आप इसे एक timedelta में बदलने के लिए वापस चाहते हैं:

thetimedelta = datetime.timedelta(hours=hours, minutes=minutes, seconds=seconds) 
+0

नोलन का जवाब बहुत साफ है - मुझे स्ट्रिपटाइम फ़ंक्शन दिखाई नहीं देता था। –

0

मैं भी यकीन है कि मैं इस

>>> pseconds = lambda hms:sum(map(lambda a,b: int(a)*b,hms.split(':'),(3600,60,1))) 
>>> pseconds('0:11:06') 
666 
+1

मैं 'मानचित्र' के बजाय यहां सूची समझ का उपयोग करूंगा। मुझे लगता है कि यह बहुत स्पष्ट होगा ... – jadkik94

+0

सही, लगभग हमेशा मानचित्र की सूची समझना पसंद करते हैं ... यहां, यह आसान नहीं होता क्योंकि इसे एक ज़िप की आवश्यकता होती है जबकि नक्शा एकाधिक अनुक्रमों को संभाल सकता है। एक में से 6, आधा दर्जन ... देखो दोनों तरह के बदसूरत –

1
>>> def tt(a): 
...  b = a.split(':') 
...  return int(b[0]) * 3600 + int(b[1]) * 60 + int(b[2]) 
... 
>>> print tt('0:11:06') 
के लिए timedelta से परेशान था नहीं कर रहा हूँ
संबंधित मुद्दे