Python 如何获得两个字符串之间的时间间隔?

Python 如何获得两个字符串之间的时间间隔?,python,datetime,timedelta,Python,Datetime,Timedelta,我有两个时间以H:M的形式存储在不同的字符串中,我需要得到这两个时间之间的差,并且能够知道它等于多少分钟。我试过datetime和timedelta,但我只是一个初学者,我真的不明白它是如何工作的。每次我都会遇到属性错误 所以我有a和b的时间,我必须在几分钟内得到它们的差异 例如,如果a=14:08和b=14:50,则差值应为42 如何以最简单的方式在python中实现这一点?另外,每个步骤需要使用什么格式?我假设差值是42,而不是4,因为14:08和14:50之间有42分钟 如果times总是

我有两个时间以H:M的形式存储在不同的字符串中,我需要得到这两个时间之间的差,并且能够知道它等于多少分钟。我试过datetime和timedelta,但我只是一个初学者,我真的不明白它是如何工作的。每次我都会遇到属性错误

所以我有a和b的时间,我必须在几分钟内得到它们的差异

例如,如果a=14:08和b=14:50,则差值应为42


如何以最简单的方式在python中实现这一点?另外,每个步骤需要使用什么格式?

我假设差值是42,而不是4,因为14:08和14:50之间有42分钟

如果times总是包含一个5个字符长度的字符串,那么它就相当容易了

time1 = '14:08'
time2 = '15:03'
hours = int(time2[:2]) - int(time1[:2])
mins  = int(time2[3:]) - int(time1[3:])
print(hours)
print(mins)
print(hours * 60 + mins)
印刷品:

1
-5
55
小时将是第二次和第一次的左两位数字[:1]减法的整数值 分钟将是右两位数字[3:]的整数值减去第二次和第一次 这印的是55。。。根据您的值,它将打印出42。上面的示例显示,当移动一整小时时,它也可以工作。
我假设差值是42,而不是4,因为14:08和14:50之间有42分钟

如果times总是包含一个5个字符长度的字符串,那么它就相当容易了

time1 = '14:08'
time2 = '15:03'
hours = int(time2[:2]) - int(time1[:2])
mins  = int(time2[3:]) - int(time1[3:])
print(hours)
print(mins)
print(hours * 60 + mins)
印刷品:

1
-5
55
小时将是第二次和第一次的左两位数字[:1]减法的整数值 分钟将是右两位数字[3:]的整数值减去第二次和第一次 这印的是55。。。根据您的值,它将打印出42。上面的示例显示,当移动一整小时时,它也可以工作。 你可以用

另外,差异是42而不是450-8==42我想这是一个打字错误

from datetime import datetime

a,b = "14:08", "14:50"

#convert to datetime
time_a = datetime.strptime(a, "%H:%M")
time_b = datetime.strptime(b, "%H:%M")

#get timedelta from the difference of the two datetimes
delta = time_b - time_a

#get the minutes elapsed
minutes = (delta.seconds//60)%60

print(minutes)
#42
你可以用

另外,差异是42而不是450-8==42我想这是一个打字错误

from datetime import datetime

a,b = "14:08", "14:50"

#convert to datetime
time_a = datetime.strptime(a, "%H:%M")
time_b = datetime.strptime(b, "%H:%M")

#get timedelta from the difference of the two datetimes
delta = time_b - time_a

#get the minutes elapsed
minutes = (delta.seconds//60)%60

print(minutes)
#42

通过从给定的时间字符串a和b中减去前者,可以获得datetime.timedelta对象之间的差异,并使用total_seconds方法获得时间间隔(以秒为单位),通过将时间间隔除以60,可以将时间间隔转换为分钟:

from datetime import timedelta
from operator import sub
sub(*(timedelta(**dict(zip(('hours', 'minutes'), map(int, t.split(':'))))) for t in (b, a))).total_seconds() // 60
因此,给定a='29:50'和b='30:08',则返回:

18.0

通过从给定的时间字符串a和b中减去前者,可以获得datetime.timedelta对象之间的差异,并使用total_seconds方法获得时间间隔(以秒为单位),通过将时间间隔除以60,可以将时间间隔转换为分钟:

from datetime import timedelta
from operator import sub
sub(*(timedelta(**dict(zip(('hours', 'minutes'), map(int, t.split(':'))))) for t in (b, a))).total_seconds() // 60
因此,给定a='29:50'和b='30:08',则返回:

18.0

4是从哪里来的?4是从哪里来的?@blhsing更正关于[:2],我会解决这个问题,但小时数将是15-14=1,分钟数=08-50=-42,小时数*60+分钟数=1*60-42=18,这似乎是正确的。非常感谢!是的,在42的例子中,这是一个输入错误,我现在编辑了它,这样其他人就不会感到困惑。注意,使用固定索引意味着,如果在小时内只有1、3或更多的数字,这个解决方案将不起作用。@blhsing我知道。。。但这就是为什么如果times总是包含一个5个字符长度的字符串,我会放第二行。@blhsing correct about[:2],我会解决这个问题,但小时数将是15-14=1,分钟数=08-50=-42,小时数*60+分钟数=1*60-42=18,这似乎是正确的。非常感谢!是的,在42的例子中,这是一个输入错误,我现在编辑了它,这样其他人就不会感到困惑。注意,使用固定索引意味着,如果在小时内只有1、3或更多的数字,这个解决方案将不起作用。@blhsing我知道。。。但这就是为什么如果times总是包含5个字符长度的字符串,我会放第二行。请注意,使用strTime意味着如果时间超过24小时,此解决方案将不起作用。这值得注意,但是假设他有2次。如果他的值高于24,那么它就不是平均的HH:MM时间值。取决于你如何使用它。他没有具体说明。请注意,使用strtime意味着,如果时间超过24小时,此解决方案将不起作用。值得注意的是,假设他有2次。如果他的值高于24,那么它就不是平均的HH:MM时间值。取决于你如何使用它。他没有具体说明。