據我所知,與timedelta功能,您可以在幾秒鐘轉換爲H:M:S使用類似:Python的時間轉換H:M:S以秒
>> import datetime
>> str(datetime.timedelta(seconds=666))
'0:11:06'
但我需要轉換H:M :秒到秒或分鐘。
你知道一個可以做到這一點的函數嗎?
據我所知,與timedelta功能,您可以在幾秒鐘轉換爲H:M:S使用類似:Python的時間轉換H:M:S以秒
>> import datetime
>> str(datetime.timedelta(seconds=666))
'0:11:06'
但我需要轉換H:M :秒到秒或分鐘。
你知道一個可以做到這一點的函數嗎?
def hms_to_seconds(t):
h, m, s = [int(i) for i in t.split(':')]
return 3600*h + 60*m + s
不錯,簡單,雖然我想你想返回'datetime.timedelta(秒= 3600 * h + 60 * m + s)'。 –
不幸的是,它不如使用datetime.strptime
從字符串中構造一個datetime
對象那麼微不足道。這個問題之前已經在Stack Overflow這裏問過:How to construct a timedelta object from a simple string,其中解決方案涉及使用python-dateutil。
另外,如果你不希望有添加其他模塊,這裏是一個類,你可以用它來從一個字符串解析timedelta
:http://kbyanc.blogspot.ca/2007/08/python-reconstructing-timedeltas-from.html
>>> 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
請注意,這將失敗如果小時數超過23個。 –
@BrendanWood更普遍的是,如果傳遞給'strptime'的字符串不是有效的時間,則失敗。 –
感謝您的澄清。 –
這個工作在2.6.4:
hours, minutes, seconds = [int(_) for _ in thestring.split(':')]
如果你希望把它放回一個timedelta:
thetimedelta = datetime.timedelta(hours=hours, minutes=minutes, seconds=seconds)
Nolen的答案更清晰 - 我沒有看到strptime函數。 –
我什至不知道我會與timedelta打擾這個
>>> pseconds = lambda hms:sum(map(lambda a,b: int(a)*b,hms.split(':'),(3600,60,1)))
>>> pseconds('0:11:06')
666
我在這裏使用列表理解而不是'map'。我認爲它會更清晰...... – jadkik94
對,幾乎總是喜歡列表理解來映射...在這裏,它不會更簡單,因爲它需要一個zip,而map可以處理多個序列。六,一,六...看起來有點醜陋的兩種方式 –
>>> def tt(a):
... b = a.split(':')
... return int(b[0]) * 3600 + int(b[1]) * 60 + int(b[2])
...
>>> print tt('0:11:06')
你的源輸入是什麼?時間戳字符串?某種對象? –
你是指從時代開始的幾秒鐘或幾分鐘?或者你只是想從時間戳中提取秒和分鐘部分? – Michael
可能的重複:http://stackoverflow.com/questions/10049805/add-values-of-0212-0345-from-a-list-together-to-make-a-format-time-hours – jadkik94