Python, подводящий итог времени

В Python, как я подвожу итог в следующий раз?

 0:00:00
 0:00:15
 9:30:56
11
задан CDspace 17 August 2017 в 15:54
поделиться

5 ответов

В виде списка строк?

timeList = [ '0:00:00', '0:00:15', '9:30:56' ]
totalSecs = 0
for tm in timeList:
    timeParts = [int(s) for s in tm.split(':')]
    totalSecs += (timeParts[0] * 60 + timeParts[1]) * 60 + timeParts[2]
totalSecs, sec = divmod(totalSecs, 60)
hr, min = divmod(totalSecs, 60)
print "%d:%02d:%02d" % (hr, min, sec)

Результат:

9:31:11
11
ответ дан 3 December 2019 в 00:48
поделиться

Предполагая, что вы хотите сложить секунды для общего времени:

def parse_time(s):
    hour, min, sec = s.split(':')
    try:
        hour = int(hour)
        min = int(min)
        sec = int(sec)
    except ValueError:
        # handle errors here, but this isn't a bad default to ignore errors
        return 0
    return hour * 60 * 60 + min * 60 + sec

print parse_time('0:00:00') + parse_time('0:00:15') + parse_time('9:30:56')
2
ответ дан 3 December 2019 в 00:48
поделиться

Это зависит от формы, в которой вы имеете эти времена, например, если вы уже имеете их как datetime.timedeltas, тогда вы можете просто просуммировать их:

>>> s = datetime.timedelta(seconds=0) + datetime.timedelta(seconds=15) + datetime.timedelta(hours=9, minutes=30, seconds=56)
>>> str(s)
'9:31:11'
26
ответ дан 3 December 2019 в 00:48
поделиться

Наивный подход (без обработки исключений):

#!/usr/bin/env python

def sumup(*times):
    cumulative = 0
    for t in times:
        hours, minutes, seconds = t.split(":")
        cumulative += 3600 * int(hours) + 60 * int(minutes) + int(seconds)
    return cumulative

def hms(seconds):
    """Turn seconds into hh:mm:ss"""
    hours = seconds / 3600
    seconds -= 3600*hours
    minutes = seconds / 60
    seconds -= 60*minutes
    return "%02d:%02d:%02d" % (hours, minutes, seconds)

if __name__ == '__main__':
    print hms(sumup(*("0:00:00", "0:00:15", "9:30:56")))
    # will print: 09:31:11
0
ответ дан 3 December 2019 в 00:48
поделиться
lines = ["0:00:00", "0:00:15", "9:30:56"]
total = 0
for line in lines:
    h, m, s = map(int, line.split(":"))
    total += 3600*h + 60*m + s
print "%02d:%02d:%02d" % (total / 3600, total / 60 % 60, total % 60)
2
ответ дан 3 December 2019 в 00:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: