如何让 Python Timedelta 在计算时间后滚动到第二天?

问题描述 投票:0回答:2

我有一个函数,它接受两个程序的小时和分钟并返回经过的时间。当 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

解决这种边缘情况的最佳方法是什么?当开始时间和结束时间在同一天时,该功能可以正常工作。

python pandas datetime timedelta
2个回答
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

0
投票

您可以检查是否

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
© www.soinside.com 2019 - 2024. All rights reserved.