Преобразование времени Python h:m:s в секунды

Я знаю, что с помощью функции timedelta вы можете конвертировать секунды в h:m: s, используя что-то вроде:

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

но мне нужно преобразовать h:m: s в секунды или минуты.

знаете ли вы функцию, которая может сделать это?

6 ответов


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

>>> 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