I am aware that with the timedelta function you can convert seconds to h:m:s using something like:
>> import datetime
>> str(datetime.timedelta(seconds=666))
'0:11:06'
But I need to convert h:m:s to seconds, or minutes.
Do you know a function that can do this?
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
And here's a cheeky one liner if you're really intent on splitting over ":"
>>> s = "00:11:06"
>>> sum(int(i) * 60**index for index, i in enumerate(s.split(":")[::-1]))
666
Unfortunately, it's not as trivial as constructing a datetime
object from a string using datetime.strptime
. This question has been asked previously on Stack Overflow here: How to construct a timedelta object from a simple string , where the solution involved using python-dateutil.
Alternatively, if you don't want to have to add another module, here is a class you can use to parse a timedelta
from a string: 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
This works in 2.6.4:
hours, minutes, seconds = [int(_) for _ in thestring.split(':')]
If you want to turn it back into a timedelta:
thetimedelta = datetime.timedelta(hours=hours, minutes=minutes, seconds=seconds)
I'm not even sure I'd bother with timedelta for this
>>> pseconds = lambda hms:sum(map(lambda a,b: int(a)*b,hms.split(':'),(3600,60,1)))
>>> pseconds('0:11:06')
666