在此线程中,我们有一个很好的解决方案 How to calculate the time interval between two time strings
但是如何编辑输出格式? 从H:MM:SS到HH:MM,例如00:40而不是0:40:00
from datetime import datetime
from datetime import timedelta
T1 = input()
T2 = input()
format = '%H:%M'
tdiff = datetime.strptime(T1, format) - datetime.strptime(T2, format)
if tdiff.days < 0:
tdiff = timedelta(days = 0,
seconds = tdiff.seconds, microseconds = tdiff.microseconds)
print(tdiff)
编辑:谢谢。下面的代码可以正常工作,但是唯一的问题是例如7:45而不是07:45。下面的代码消除了最后的秒数问题。现在,我只不知道如何强制在<10小时格式前加0。
from datetime import datetime
from datetime import timedelta
T1 = input()
T2 = input()
format = '%H:%M'
tdiff = datetime.strptime(T1, format) - datetime.strptime(T2, format)
if tdiff.days < 0:
tdiff = timedelta(days = 0,
seconds = tdiff.seconds, microseconds = tdiff.microseconds)
print(str(tdiff).rstrip("0").rstrip(":"))
答案 0 :(得分:0)
您在说自己从H:MM:SS
到HH:MM
的过程中自相矛盾,但是您举了一个例子,说明删除小时而不是秒。无论如何,我猜您的意思是,如果要删除任何前导零,则要删除它们(删除小时)?
在这种情况下,有两个选择。自己构建字符串,如下所示:
from datetime import datetime
from datetime import timedelta
T1 = '00:50'
T2 = '00:40'
format = '%H:%M'
tdiff = datetime.strptime(T1, format) - datetime.strptime(T2, format)
if tdiff.days < 0:
tdiff = timedelta(days = 0, seconds = tdiff.seconds, microseconds = tdiff.microseconds)
print(':'.join([block for block in str(tdiff).split(':') if block != '0']))
您跳过单位数字零(小时),但保留两位数字零(秒等)的地方。
或者您可以这样做:
print(str(tdiff).lstrip("0").lstrip(":"))
这只是去除开头。如果需要去除末端,请替换为.rstrip()
。
如果要确保在第一个示例中始终有两位数字表示,则可以执行以下操作:
print(':'.join(['{:02}'.format(int(block)) for block in str(tdiff).split(':') if block != '0']))
在这一点上,您正在以猴子的方式修补问题,该问题很可能可以以更整齐,更有效的方式解决,并且您最初的问题描述与您要/试图解决的问题并不完全一致。但这是一种方法。
如果您想删除秒但要保持几个小时不变,请执行以下操作:
print(':'.join(['{:02}'.format(int(block)) for block in str(tdiff).split(':')[:-1]]))