Как преобразовать временную строку H: MM: SS в секунды в Python? - PullRequest
43 голосов
/ 19 июня 2011

В принципе, у меня есть обратная задача к этой проблеме: Время Python Секунды до ч: м: с

У меня есть строка в формате H: MM: SS (всегда 2 цифры для минут и секунд), и мне нужно целое число секунд, которое оно представляет. Как я могу сделать это в Python?

Например:

  • "1:23:45" будет выдавать 5025
  • "0:04:15" выдаст результат 255
  • "0:00:25" выдаст результат 25

и т.д.

Ответы [ 9 ]

64 голосов
/ 19 июня 2011
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'))
42 голосов
/ 19 июня 2011
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
8 голосов
/ 15 мая 2014

Использование модуля 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

2 голосов
/ 24 августа 2018

Вы можете разделить время на список и добавить каждый отдельный компонент времени, умножив компонент часов на 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)
2 голосов
/ 08 апреля 2017

Вы можете использовать лямбду и сократить список и тот факт, что 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(',')])
1 голос
/ 31 августа 2017

Мне не очень понравился ни один из приведенных ответов, поэтому я использовал следующее:

def timestamp_to_seconds(t):
    return sum(float(n) * m for n,
               m in zip(reversed(time.split(':')), (1, 60, 3600))
               )
1 голос
/ 19 июня 2011

Без многих проверок и при условии, что это либо «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:)

1 голос
/ 19 июня 2011
parts = time_string.split(":")
seconds = int(parts[0])*(60*60) + int(parts[1])*60 + int(parts[2])
0 голосов
/ 16 октября 2014

Другой вариант, если у вас есть дни в строке:

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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...