如何在Python中将H:MM:SS时间字符串转换为秒?

时间:2011-06-19 14:05:11

标签: python

基本上我有这个问题的反面:Python Time Seconds to h:m:s

我有一个格式为H:MM:SS的字符串(总是2位数分钟和秒),我需要它所代表的整数秒数。我怎么能在python中做到这一点?

例如:

  • “1:23:45”会产生5025的输出
  • “0:04:15”将产生255
  • 的输出
  • “0:00:25”会产生25
  • 的输出

13 个答案:

答案 0 :(得分:61)

def get_sec(time_str):
    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')

答案 1 :(得分:41)

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

答案 2 :(得分:7)

使用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

答案 3 :(得分:2)

您可以将时间分成一个列表,然后添加每个单独的时间部分,将小时部分乘以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)

答案 4 :(得分:1)

parts = time_string.split(":")
seconds = int(parts[0])*(60*60) + int(parts[1])*60 + int(parts[2])

答案 5 :(得分:1)

没有很多检查,并假设它是“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答案的另一种“拼写”:)

答案 6 :(得分:1)

您可以使用lambda并减少列表以及m = 60s和h = 60m的事实。 (参见"减少列表"在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(',')])

答案 7 :(得分:1)

使用datetime模块也是可行且更可靠的

import datetime as dt

def get_total_seconds(stringHMS):
   timedeltaObj = dt.datetime.strptime(stringHMS, "%H:%M:%S") - dt.datetime(1900,1,1)
   return timedeltaObj.total_seconds()

datetime.strptime根据%H:%M:%S格式分析字符串,并创建日期时间对象,例如1900年,month1,day 1,H小时,M分钟和秒S。 >

这就是为什么要减去秒,年和月的总秒数的原因。

print(get_total_seconds('1:23:45'))
>>> 5025.0

print(get_total_seconds('0:04:15'))
>>> 255.0

print(get_total_seconds('0:00:25'))
>>>25.0

答案 8 :(得分:0)

如果您在字符串上有天数,则另一种选择:

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])

答案 9 :(得分:0)

我并不喜欢任何给定的答案,所以我使用了以下内容:

$('table').tablesorter({
    sortInitialOrder: 'desc'
});

答案 10 :(得分:0)

扩展@FMc解决方案,该解决方案包含Horner's method的一半。 Horner方法的优点:跳过反转列表,避免进行power计算。

from functools import reduce

timestamp = "1:23:45"
reduce(lambda sum, d: sum * 60 + int(d), timestamp.split(":"), 0)

答案 11 :(得分:0)

taskinoor

的出色响应做一个简单的概括

在我的问题中,格式相似,但包含AM或PM。

设置格式“ HH:MM:SS AM”或“ HH:MM:SS PM”

在这种情况下,功能更改为:

def get_sec(time_str):
"""Get Seconds from time."""
if 'AM' in time_str:
    time_str = time_str.strip('AM')
    h, m, s = time_str.split(':')
    seconds = int(h) * 3600 + int(m) * 60 + int(s)
if 'PM' in time_str:
    time_str = time_str.strip('PM')
    h, m, s = time_str.split(':')
    seconds = (12 + int(h)) * 3600 + int(m) * 60 + int(s)

return seconds 

答案 12 :(得分:-1)

在 Pandas 中使用 @JayRizzo 的酷函数和列表理解:

Snowflake