Преобразование времени Python h:m:s в секунды
Я знаю, что с помощью функции timedelta вы можете конвертировать секунды в h:m: s, используя что-то вроде:
>> import datetime
>> str(datetime.timedelta(seconds=666))
'0:11:06'
но мне нужно преобразовать h:m: s в секунды или минуты.
знаете ли вы функцию, которая может сделать это?
6 ответов
>>> 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
к сожалению, это не так тривиально, как строительство datetime
объект из строки с помощью datetime.strptime
. Этот вопрос был задан ранее в Stack Overflow здесь:как построить объект timedelta из простой строки, где решение связано с использованием python-dateutil.
кроме того, если вы не хотите добавлять другой модуль, вот класс, который вы можете использовать для разбора timedelta
из строки: http://kbyanc.blogspot.ca/2007/08/python-reconstructing-timedeltas-from.html
>>> def tt(a):
... b = a.split(':')
... return int(b[0]) * 3600 + int(b[1]) * 60 + int(b[2])
...
>>> print tt('0:11:06')
666
это работает в 2.6.4:
hours, minutes, seconds = [int(_) for _ in thestring.split(':')]
Если вы хотите превратить его обратно в timedelta:
thetimedelta = datetime.timedelta(hours=hours, minutes=minutes, seconds=seconds)
Я даже не уверен, что я бы потрудился с timedelta для этого
>>> pseconds = lambda hms:sum(map(lambda a,b: int(a)*b,hms.split(':'),(3600,60,1)))
>>> pseconds('0:11:06')
666