2012-05-24 79 views
8

據我所知,與timedelta功能,您可以在幾秒鐘轉換爲H:M:S使用類似:Python的時間轉換H:M:S以秒

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

但我需要轉換H:M :秒到秒或分鐘。

你知道一個可以做到這一點的函數嗎?

+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 * h + 60 * m + s)'。 –

1

不幸的是,它不如使用datetime.strptime從字符串中構造一個datetime對象那麼微不足道。這個問題之前已經在Stack Overflow這裏問過:How to construct a timedelta object from a simple string,其中解決方案涉及使用python-dateutil

另外,如果你不希望有添加其他模塊,這裏是一個類,你可以用它來從一個字符串解析timedeltahttp://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 

這裏是一個厚臉皮的一個襯墊,如果你「再上分裂了真正意圖 「:」

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

請注意,這將失敗如果小時數超過23個。 –

+1

@BrendanWood更普遍的是,如果傳遞給'strptime'的字符串不是有效的時間,則失敗。 –

+0

感謝您的澄清。 –

0

這個工作在2.6.4:

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

如果你希望把它放回一個timedelta:

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

Nolen的答案更清晰 - 我沒有看到strptime函數。 –

0

我什至不知道我會與timedelta打擾這個

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

我在這裏使用列表理解而不是'map'。我認爲它會更清晰...... – jadkik94

+0

對,幾乎總是喜歡列表理解來映射...在這裏,它不會更簡單,因爲它需要一個zip,而map可以處理多個序列。六,一,六...看起來有點醜陋的兩種方式 –

1
>>> def tt(a): 
...  b = a.split(':') 
...  return int(b[0]) * 3600 + int(b[1]) * 60 + int(b[2]) 
... 
>>> print tt('0:11:06') 
相關問題