我知道使用timedelta函数你可以使用类似的东西将秒转换为h:m:s:
>> import datetime
>> str(datetime.timedelta(seconds=666))
'0:11:06'
但我需要将h:m:s转换为秒或分钟。
你知道一个可以做到这一点的功能吗?
答案 0 :(得分:13)
def hms_to_seconds(t):
h, m, s = [int(i) for i in t.split(':')]
return 3600*h + 60*m + s
答案 1 :(得分:12)
>>> 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
答案 2 :(得分:1)
不幸的是,使用datetime
从字符串构造datetime.strptime
对象并不简单。之前在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
答案 3 :(得分:1)
>>> def tt(a):
... b = a.split(':')
... return int(b[0]) * 3600 + int(b[1]) * 60 + int(b[2])
...
>>> print tt('0:11:06')
666
答案 4 :(得分:0)
这适用于2.6.4:
hours, minutes, seconds = [int(_) for _ in thestring.split(':')]
如果你想把它变回timedelta:
thetimedelta = datetime.timedelta(hours=hours, minutes=minutes, seconds=seconds)
答案 5 :(得分:0)
我甚至不确定我是否会为timedelta而烦恼
>>> pseconds = lambda hms:sum(map(lambda a,b: int(a)*b,hms.split(':'),(3600,60,1)))
>>> pseconds('0:11:06')
666
答案 6 :(得分:0)
您不需要导入任何东西!
def time(s):
m = s // 60
h = (m // 60) % 60
m %= 60
s %= 60
return h,m,s