2012-10-02 56 views
4

可能重複:
How to construct a timedelta object from a simple string解析的時間字符串

我有一個字符串,它的格式爲hours:minutes:seconds,但它不是一天,但持續時間的時間。例如,100:00:00表示100 hours

我想查找從當前時間偏移了字符串中指定的時間量的時間。我可以使用正則表達式來手動拉開時間字符串並將其轉換爲秒並將其添加到由time.time()返回的浮點數,但是有沒有time函數來執行此操作?

time.strptime()time.strptime()函數格式似乎適用於日期/日期字符串的時間而不是任意字符串。

+3

http://stackoverflow.com/questions/4628122/how-to-construct-a-timedelta-object-from-a - 簡單字符串 –

+0

看起來不錯,我找不到那個。謝謝! – tpg2114

+0

timedelta在這裏應該很有用。 – ronak

回答

1

不使用re但有時候,理解正則表達式比編寫python更有用。

>>> import datetime 
>>> time_str = "100:00:00" 
>>> hours, minutes, seconds = [int(i) for i in time_str.split(":")] 
>>> time_in_seconds = hours * 60 * 60 + minutes * 60 + seconds 
>>> time_in_seconds 
360000 
>>> now = datetime.datetime.now() 
>>> now 
datetime.datetime(2012, 10, 2, 10, 24, 6, 639000) 
>>> new_time = now + datetime.timedelta(seconds=time_in_seconds) 
>>> new_time 
datetime.datetime(2012, 10, 6, 14, 24, 6, 639000) 

正如nneonneo指出datetime.timedelta()接受hoursminutes,和seconds作爲參數。 (不推薦),那麼你甚至可以做一些愚蠢的是這樣的:

>>> datetime.timedelta(**{k:v for k,v in zip(["hours", "minutes", "seconds"], [int(i) for i in "100:00:00".split(":")])}) 
datetime.timedelta(4, 14400) 
6
import datetime 
dur_str = "100:00:00" 
h, m, s = map(int, dur_str.split(':')) 
dur = datetime.timedelta(hours=h, minutes=m, seconds=s) 
+0

不錯!忘了你可以直接傳遞小時,分鐘,秒值。 – monkut

+0

這對於'mm:ss'等較短格式不起作用,但.. – Nickolay

+0

要引用提問者,「我有一個格式爲」hours:minutes:seconds「的字符串...」 它實際上真的很容易使這個句柄短格式;只需從'.split(':')'中的元素數量進行調整即可。 – nneonneo