我看到一些想要相同的问题,除非在我的情况下,时间格式并不总是hh:mm:ss,有时它只是mm:ss
我理解这里提到的想法How to convert an H:MM:SS time string to seconds in Python?和Python Time conversion h:m:s to seconds
我不明白的是如何处理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])
编辑: 我认为我的问题不够明确。我正在寻找一种解决方案来处理所有可能的格式,包括1个单一功能。
答案 0 :(得分:6)
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
答案 1 :(得分:2)
所有时间格式几乎相同。查看datetime模块:
>>> s = "15:34:23"
>>> datetime.datetime.strptime(s, "%H:%M:%S")
datetime.datetime(1900, 1, 1, 15, 34, 23)
>>> s = "34:23"
>>> datetime.datetime.strptime(s, "%M:%S")
datetime.datetime(1900, 1, 1, 0, 34, 23)
>>> s = "4:34"
>>> datetime.datetime.strptime(s, "%M:%S")
datetime.datetime(1900, 1, 1, 0, 4, 34)
%H
是几个小时,%M
是几分钟,%S
是几秒钟。可以找到一个列表here
作为一项功能:
>>> 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
答案 2 :(得分:0)
pypi的最新版本(刚刚提交; simple-date上的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
(America/Santiago
部分只是因为那是我当地的时区 - 如果需要,你可以指定一个时区,tz='UTC'
或类似的)
不幸的是,目前还没有支持总秒数,所以你仍然必须自己做。不过,我会考虑如何添加它。
它类似于正则表达式(其中?
表示某些东西是可选的)。你也可以选择(...|...|...)
。
[更新以反映0.3语法]