以Python输出格式计算时间

时间:2019-02-25 20:38:39

标签: python

在此线程中,我们有一个很好的解决方案 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(":"))

1 个答案:

答案 0 :(得分:0)

您在说自己从H:MM:SSHH: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]]))