Ответ 1
def get_sec(time_str):
"""Get Seconds from time."""
h, m, s = time_str.split(':')
return int(h) * 3600 + int(m) * 60 + int(s)
print(get_sec('1:23:45'))
print(get_sec('0:04:15'))
print(get_sec('0:00:25'))
В основном у меня есть обратная задача: Python Time Seconds to h: m: s
У меня есть строка в формате H: MM: SS (всегда 2 цифры в минутах и секундах), и мне нужно целое число секунд, которое она представляет. Как это сделать в python?
Например:
и т.д.
def get_sec(time_str):
"""Get Seconds from time."""
h, m, s = time_str.split(':')
return int(h) * 3600 + int(m) * 60 + int(s)
print(get_sec('1:23:45'))
print(get_sec('0:04:15'))
print(get_sec('0:00:25'))
t = "1:23:45"
print(sum(int(x) * 60 ** i for i,x in enumerate(reversed(t.split(":")))))
В текущем примере, разработанном:
45 × 60⁰ = 45 × 1 = 45
23 × 60¹ = 23 × 60 = 1380
1 × 60² = 1 × 3600 = 3600
Использование модуля datetime
import datetime
t = '10:15:30'
h,m,s = t.split(':')
print(int(datetime.timedelta(hours=int(h),minutes=int(m),seconds=int(s)).total_seconds()))
Выход: 36930
Вы можете использовать лямбда и уменьшить список и тот факт, что m = 60 с и h = 60 м. (см. "Уменьшение списка" на http://www.python-course.eu/lambda.php)
timestamp = "1:23:45"
seconds = reduce(lambda x, y: x*60+y, [int(i) for i in (timestamp.replace(':',',')).split(',')])
Вы можете разделить время на список и добавить каждый отдельный компонент времени, умножив компонент часов на 3600 (количество секунд в часе) и компонент минут на 60 (количество секунд в минуте), например:
timeInterval ='00:35:01'
list = timeInterval.split(':')
hours = list[0]
minutes = list[1]
seconds = list[2]
total = (int(hours) * 3600 + int(minutes) * 60 + int(seconds))
print("total = ", total)
parts = time_string.split(":")
seconds = int(parts[0])*(60*60) + int(parts[1])*60 + int(parts[2])
Без многих проверок и предполагая это либо "SS", либо "MM: SS" или "HH: MM: SS" (хотя и не обязательно две цифры на каждую часть):
def to_seconds(timestr):
seconds= 0
for part in timestr.split(':'):
seconds= seconds*60 + int(part)
return seconds
Это другое "написание" ответа FMc:)
Мне не очень понравился ни один из приведенных ответов, поэтому я использовал следующее:
def timestamp_to_seconds(t):
return sum(float(n) * m for n,
m in zip(reversed(time.split(':')), (1, 60, 3600))
)
Другая альтернатива, если у вас есть дни в строке:
def duration2sec(string):
if "days" in string:
days = string.split()[0]
hours = string.split()[2].split(':')
return int(days) * 86400 + int(hours[0]) * 3600 + int(hours[1]) * 60 + int(hours[2])
else:
hours = string.split(':')
return int(hours[0]) * 3600 + int(hours[1]) * 60 + int(hours[2])
Расширение на решение @FMc, которое включает в себя половину метода Хорнера. Преимущество метода Хорнера: пропустите реверсирование списка, избегайте расчета мощности.
from functools import reduce
timestamp = "1:23:45"
reduce(lambda sum, d: sum * 60 + int(d), timestamp.split(":"), 0)