8

我知道使用 timedelta 函数,您可以使用以下方法将秒转换为 h:m:s:

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

但我需要将 h:m:s 转换为秒或分钟。

你知道可以做到这一点的功能吗?

4

7 回答 7

13
>>> 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
于 2012-05-24T17:28:43.280 回答
13
def hms_to_seconds(t):
    h, m, s = [int(i) for i in t.split(':')]
    return 3600*h + 60*m + s
于 2012-05-24T17:34:03.867 回答
2

不幸的是,它并不像datetime使用datetime.strptime. 这个问题之前在 Stack Overflow 上被问过:如何从一个简单的字符串构造一个 timedelta 对象,其中解决方案涉及使用python-dateutil

或者,如果您不想添加另一个模块,可以使用以下类timedelta从字符串中解析 a:http: //kbyanc.blogspot.ca/2007/08/python-reconstructing-timedeltas-from .html

于 2012-05-24T17:28:36.630 回答
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

于 2012-05-24T17:38:20.443 回答
0

这适用于 2.6.4:

hours, minutes, seconds = [int(_) for _ in thestring.split(':')]

如果你想把它变回时间增量:

thetimedelta = datetime.timedelta(hours=hours, minutes=minutes, seconds=seconds)
于 2012-05-24T17:28:55.970 回答
0

我什至不确定我是否会为此烦恼 timedelta

>>> pseconds = lambda hms:sum(map(lambda a,b: int(a)*b,hms.split(':'),(3600,60,1)))
>>> pseconds('0:11:06')
666
于 2012-05-24T17:35:32.077 回答
0

你不需要导入任何东西!

def time(s):
  m = s // 60
  h = (m // 60) % 60
  m %= 60
  s %= 60
  return h,m,s
于 2021-01-01T14:16:44.967 回答