从列表中添加02:12,03:45 ...的值,使格式时间=小时:分钟:秒

时间:2012-04-06 22:09:04

标签: python-3.x

我想将一个字符串转换为分钟,然后将其全部添加并将其作为字符串返回,我在执行此操作时遇到了困难。

我有一个包含此列表的列表:

TimeL = ['02:32','03:43','01:05','56:03']

我想将这些分钟:秒组合在一起并返回一个值为格式小时的总数:mm:ss但是如果它们的值不足以制作一小时,我只想返回一个值为mm:ss 。

到目前为止,我能做的就是将每个东西转换为秒并添加它们,但这不是我想要的,它只是我知道该怎么做。

def getTIME(s):
    l = s.split(":")
    return int(l[0])*(60) + int(l[1])


for i in range(len(TimeL)):
        NEW = getTIME(TimeL[i])
        NewTotalTime = NewTotalTime + NEW

所以我的方法将返回一个只有秒的值..所以就像3432秒。我希望它是几小时:分钟:秒,我卡住了。任何人都可以帮助甚至一点点,非常感谢你!

2 个答案:

答案 0 :(得分:1)

使用以下内容:

str(datetime.timedelta(seconds=3432))

您需要为此导入datetime模块。您已经有秒数,这会将其转换为包含小时,分钟和秒的字符串。

答案 1 :(得分:1)

这就是你想要的。 1分= 60秒,所以你将秒除以60.你的问题是你需要在python中除以60.0,这样你才能得到确切的值(浮点值)。完成此操作后,您将获得最小的整数值(math.floor),例如150秒是2.5分钟,所以你需要2分钟,2分钟是120秒,你从150中删除你得到30分。这是剩余的秒数。您在数小时(60分钟)内应用相同的推理

import sys
import math

def getSeconds(s):
    l = s.split(":")
    return int(l[0])*(60) + int(l[1])

def getTotalString(time_list):
    total_secs = 0
    for time_str in time_list:
        total_secs += getSeconds(time_str)

    total_mins = total_secs/60.0
    mins = math.floor(total_mins)
    secs = total_secs-mins*60

    if mins<60:
        return '%.2d:%.2d' % (mins, secs)
    else:
        hours = math.floor(mins/60.0)
        mins = mins-60*hours
        return '%.2d:%.2d:%.2d' % (hours, mins, secs)

if __name__ == '__main__':
    print getTotalString(sys.argv[1:])

计算秒总和的方法可以在Python中用一行完成:

total_secs = sum(getSeconds(time_str) for time_str in time_list)

sum将计算列表(或迭代器)中数字的总和。您可以为其提供一个数字列表或要添加的数字生成器the number of seconds in each time string in the list

我希望尽可能清晰明了,但你可以使用更简单的datetime模块解决方案。

UPDATE:这是Python 2.x而不是Python 3.所以它可能无法正常工作,但想法是一样的,语法不同。