我有一个函数,它接受两个程序的小时和分钟并返回经过的时间。当 end_time 不是第二天时,它工作得很好。如果是第二天,我得到一个负数。解决这个问题的最佳方法是什么?
def elapsed_time_seconds(hour_start,hour_end,minute_start,minute_end):
hour_start = int(hour_start)
minute_start = int(minute_start)
hour_end = int(hour_end)
minute_end = int(minute_end)
t1 = timedelta(hours=hour_start,minutes=minute_start)
t2 = timedelta(hours=hour_end,minutes=minute_end)
return (t2-t1).total_seconds()
如果程序从晚上 11:30 开始,到凌晨 3:00 结束,我们预计它会返回 12600 秒。然而,这是我目前得到的:
elapsed_time_seconds('23','03','00','00')
-72000.0
解决这种边缘情况的最佳方法是什么?当开始时间和结束时间在同一天时,该功能可以正常工作。
您可以通过检查结束时间是否小于开始时间来解决此边缘情况,这表明结束时间是在第二天。如果是这种情况,您可以将经过的时间增加 24 小时(或 86400 秒)以说明日期的变化:
from datetime import timedelta
def elapsed_time_seconds(hour_start: str, hour_end: str, minute_start: str, minute_end: str) -> int:
hour_start = int(hour_start)
minute_start = int(minute_start)
hour_end = int(hour_end)
minute_end = int(minute_end)
t1 = timedelta(hours=hour_start, minutes=minute_start)
t2 = timedelta(hours=hour_end, minutes=minute_end)
elapsed = (t2 - t1).total_seconds()
# Check if the end time is on the next day
if elapsed < 0:
elapsed += timedelta(days=1).total_seconds()
return elapsed
您可以检查是否
t1 > t2
,如果是,则将 24 小时添加到t2
:
from datetime import timedelta
def elapsed_time_seconds(hour_start, hour_end, minute_start, minute_end):
hour_start = int(hour_start)
minute_start = int(minute_start)
hour_end = int(hour_end)
minute_end = int(minute_end)
t1 = timedelta(hours=hour_start, minutes=minute_start)
t2 = timedelta(hours=hour_end, minutes=minute_end)
if t1 > t2:
t2 += timedelta(hours=24)
return (t2 - t1).total_seconds()
print(elapsed_time_seconds("23", "03", "30", "00"))
输出:
12600.0