Python 另一种将hh:mm:ss转换为秒的方法
我见过一些问题,除了在我的情况下,时间格式并不总是hh:mm:ss,有时只是mm:ss 我理解这里和这里提到的想法 我不明白的是如何处理像hh:mm:ss,h:mm:ss,mm:ss或只是m: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]) 编辑: 我想我的问题还不够清楚。我正在寻找一种解决方案,用一个函数来处理所有可能的格式。对于所有的时间格
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