Python 另一种将hh:mm:ss转换为秒的方法

Python 另一种将hh:mm:ss转换为秒的方法,python,Python,我见过一些问题,除了在我的情况下,时间格式并不总是hh:mm:ss,有时只是mm:ss 我理解这里和这里提到的想法 我不明白的是如何处理像hh:mm:ss,h:mm:ss,mm:ss或只是m:ss这样的情况 def getSec(s): l = s.split(':') return int(l[0]) * 3600 + int(l[1]) * 60 + int(l[2]) 编辑: 我想我的问题还不够清楚。我正在寻找一种解决方案,用一个函数来处理所有可能的格式。对于所有的时间格

我见过一些问题,除了在我的情况下,时间格式并不总是hh:mm:ss,有时只是mm:ss

我理解这里和这里提到的想法

我不明白的是如何处理像hh:mm:ss,h:mm:ss,mm:ss或只是m:ss这样的情况

def getSec(s):
    l = s.split(':')
    return int(l[0]) * 3600 + int(l[1]) * 60 + int(l[2])
编辑:
我想我的问题还不够清楚。我正在寻找一种解决方案,用一个函数来处理所有可能的格式。

对于所有的时间格式,这几乎是一样的。查看模块:

%H
代表小时,
%M
代表分钟,
%S
代表秒。可以找到一个列表


作为一项功能:

>>> def getSec(s):
...     L = s.split(':')
...     if len(L) == 1:
...             return L[0]
...     elif len(L) == 2:
...             datee = datetime.datetime.strptime(s, "%M:%S")
...             return datee.minute * 60 + datee.second
...     elif len(L) == 3:
...             datee = datetime.datetime.strptime(s, "%H:%M:%S")
...             return datee.hour * 3600 + datee.minute * 60 + datee.second
...
>>> getSec("13:25:43")
48343
>>> getSec("25:43")
1543
>>> getSec("43")
43
最新版本(刚刚提交;0.3.0版本)使用可选表达式扩展了Python的时间格式,有点像正则表达式。因此,
((H:)?M:)?S
将只匹配秒、分和秒,或小时、分和秒

例如:

>>> from simpledate import *
>>> SimpleDate('56', format='((H:)?M:)?S').time
datetime.time(0, 0, 56, tzinfo=<DstTzInfo 'America/Santiago' SMT-1 day, 19:17:00 STD>)
>>> SimpleDate('12:34:56', format='((H:)?M:)?S').time
datetime.time(12, 34, 56, tzinfo=<DstTzInfo 'America/Santiago' SMT-1 day, 19:17:00 STD>)
>>> SimpleDate('34:56', format='((H:)?M:)?S').hour
0
>>> SimpleDate('34:56', format='((H:)?M:)?S').minute
34
>>> SimpleDate('34:56', format='((H:)?M:)?S').second
56
来自simpledate导入的
>>*
>>>SimpleDate('56',格式='((H:)?M:)?S')。时间
datetime.time(0,0,56,tzinfo=)
>>>SimpleDate('12:34:56',格式='((H:)?M:)?S')。时间
datetime.time(12,34,56,tzinfo=)
>>>SimpleDate('34:56',格式='((H:)?M:)?S')。小时
0
>>>SimpleDate('34:56',格式='((H:)?M:)?S')。分钟
34
>>>SimpleDate('34:56',格式='((H:)?M:)?S')。秒
56
(美国/圣地亚哥的
部分仅仅是因为那是我的本地时区-如果需要,您也可以使用
tz='UTC'
或类似工具指定时区)

不幸的是,目前没有对total seconds的支持,所以您仍然需要自己完成。不过,我会考虑如何添加它

它类似于正则表达式(其中
表示某些内容是可选的)。您还可以选择
(…|…|…)


[更新以反映0.3语法]

。。。这是真的吗?现在它给了我一个索引器错误:列表索引超出范围,所以我认为代码getSec是错误的。好的,我来看看,谢谢。我现在遇到的问题是,对于当前代码,我得到的索引器:list索引超出了范围,我认为这是因为它需要h:m:s而不是给定的m:s?@user1987032当前代码?请在你的问题中贴出来谢谢,这有助于我更好地理解它。
def getSec(s):
    l = map(int, s.split(':')) # l = list(map(int, s.split(':'))) in Python 3.x
    return sum(n * sec for n, sec in zip(l[::-1], (1, 60, 3600)))

getSec('20') # 20
getSec('1:20') # 80
getSec('1:30:01') # 5401
>>> from simpledate import *
>>> SimpleDate('56', format='((H:)?M:)?S').time
datetime.time(0, 0, 56, tzinfo=<DstTzInfo 'America/Santiago' SMT-1 day, 19:17:00 STD>)
>>> SimpleDate('12:34:56', format='((H:)?M:)?S').time
datetime.time(12, 34, 56, tzinfo=<DstTzInfo 'America/Santiago' SMT-1 day, 19:17:00 STD>)
>>> SimpleDate('34:56', format='((H:)?M:)?S').hour
0
>>> SimpleDate('34:56', format='((H:)?M:)?S').minute
34
>>> SimpleDate('34:56', format='((H:)?M:)?S').second
56