[英]Convert time (HH:MM:SS) to minutes in python
如何将 HH:MM:SS 转换为分钟?
我试过下面工作正常:
import datetime as DT
t1 = DT.datetime.strptime('0:10:00', '%H:%M:%S')
我尝试了另一个示例并收到错误:
import datetime as DT
t1 = DT.datetime.strptime('9715:56:46', '%H:%M:%S')
错误:
ValueError: time data '9715:56:46' does not match format '%H:%M:%S'
在这个例子中,它支持 %H 的最大 23,如果我的小时数超过 23(在这种情况下我有 9715 小时)如何得到它?
datetime.datetime
是时间点的表示,而不是持续时间。
datetime.timedelta
是时间长度的表示。 观察:
from datetime import timedelta
delta = timedelta(hours=9715, minutes=56, seconds=46)
total_seconds = delta.total_seconds()
minutes = int(total_seconds // 60)
seconds = int(total_seconds % 60)
print('{minutes}:{seconds}'.format(minutes=minutes, seconds=seconds))
编辑:我更改了代码以使用 python 2.7。
您可以将sum
与生成器表达式或map
:
from operator import mul
my_time = '9715:56:46'
factors = (60, 1, 1/60)
t1 = sum(i*j for i, j in zip(map(int, my_time.split(':')), factors))
t2 = sum(map(mul, map(int, my_time.split(':')), factors))
print(t1) # 582956.7666666667
assert t1 == t2
正如错误所说,您提供了错误的小时值。
它必须 >=0 且 < 24。
[ https://docs.python.org/2/library/datetime.html][1]
转换为分钟:
input_time='9715:56:46'
t=input_time.split(':')
total_minutes= int(t[0])*60+int(t[1])*1 +int(t[2])/60
strptime
函数(在其各种化身中)并非设计用于执行此类任务,它仅用于解析有效的时间/日期字符串。
简单的解决方案是编写自己的代码来解析字符串并执行算术运算。 这是一个输出秒的例子; 显然你可以除以 60 得到分钟。
def hms_to_s(s):
t = 0
for u in s.split(':'):
t = 60 * t + int(u)
return t
data = (
'10',
'0:10',
'1:30',
'2:1:00',
'1000:00:00',
'9700:00:00',
'15:56:46',
'9715:56:46',
)
for s in data:
print(s, hms_to_s(s))
输出
10 10
0:10 10
1:30 90
2:1:00 7260
1000:00:00 3600000
9700:00:00 34920000
15:56:46 57406
9715:56:46 34977406
简单的支持 d:h:m:s / h:m:s / m:s / s !
def dhms_to_sec(dhms_str):
'''supports also format of d:h:m:s, h:m:s, m:s and s'''
_,d,h,m,s = (':0'*10+dhms_str).rsplit(':',4)
return int(d)*24*60*60+int(h)*60*60+int(m)*60+int(s)
# examples:
print(dhms_to_sec('04')) # will print 4
print(dhms_to_sec('1:04')) # will print 64
print(dhms_to_sec('1:01:04')) # will print 3664
print(dhms_to_sec('1:1:4')) # will print 3664
您可以通过 /60 将其转换为分钟......它也将接受像 1:56:0 这样的奇怪情况
假设您想将字符串“01:21:48”转换为分钟。
from datetime import timedelta
h = "01:21:48"
delta = timedelta(hours=int(h.split(':')[0]), minutes=int(h.split(':')[1]), seconds=int(h.split(':')[2]))
minutes = delta.total_seconds()/60
print(minutes)
所以打印出来的结果是:81.8
您对库及其工作方式有一个糟糕的概念,看,第一个参数是一天中的小时,格式为 00-23,例如 22 是晚上 10 点,因此有效小时数从 00 到 23,另一个输入是无效输入。
例子:
import datetime as DT
t1 = DT.datetime.strptime('23:56:46', '%H:%M:%S')
观察:
第一个值可以是0
或00
,但000
也会产生相同的错误:
t1 = DT.datetime.strptime('0:56:46', '%H:%M:%S') # it's ok
t1 = DT.datetime.strptime('00:56:46', '%H:%M:%S') # it's ok
t1 = DT.datetime.strptime('000:56:46', '%H:%M:%S') # same error you got
i = "15:21"
sp = i.split(":")
minutes = 0.0
if len(sp) == 3:
minutes = minutes + int(sp[0]) * 60
minutes = minutes + int(sp[1])
minutes = minutes + int(sp[2]) / 60
elif len(sp) == 2:
minutes = minutes + int(sp[0])
minutes = minutes + int(sp[1]) / 60
elif len(sp) == 1:
minutes = minutes + int(sp[0]) / 60
print(minutes)
一个很好的解决方案:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.