繁体   English   中英

在python中将时间(HH:MM:SS)转换为分钟

[英]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')

观察:

第一个值可以是000 ,但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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM