首页 > 解决方案 > Python:如何检查时间是否超过指定时间?

问题描述

我正在尝试编写停车场费用计算器。提供多种费率:从早上 7 点到晚上 10.30 - 每 30 分钟 0.60 美元 夜间收费 晚上 10.30 到早上 7 点 - 固定费用 5 美元

如果停车时间从白天的价格溢出到晚上的价格,我该如何计算?下面是我现在的位置。我不确定从这里去哪里,或者这是否是正确的开始方式。

def getCharge(self, endTime, startTime, rate):
    endTime = datetime.strptime(endTime, '%d/%m/%Y %H:%M')
    startTime = datetime.strptime(startTime, '%d/%m/%Y %H:%M')
    # elapsedDays = (endTime - startTime).days
    # print(elapsedDays)
    duration = (endTime - startTime).total_seconds() / 60
    print(duration)
    blocks = math.ceil( duration / 30 )
    print(blocks)
    charge = blocks * rate
    return charge

总结一下:

  1. 如果停车时间超过晚上 10.30,我如何添加支票(将收取固定的夜间费用)
  2. 如果停车时间超过夜间时间并进入第二天早上 7 点之后,我如何添加支票(前一天的白天费率 + 夜间费率 + 第二天的白天费率)

标签: pythondatetimetimedelta

解决方案


最简单的方法是每 30 分钟迭代一次并以这种方式计算费用。

HALFHOUR_RATE = 0.6
NIGHT_FEE = 5


def get_charge(start_datetime, end_datetime):
    tmp_datetime = start_datetime
    charged = 0
    last_night_charged_day = None

    while tmp_datetime < end_datetime:
        if tmp_datetime.hour >= 22 or tmp_datetime.hour < 7:
            if tmp_datetime.hour == 22 and tmp_datetime.minute < 30:
                # Still not a night
                charged += HALFHOUR_RATE
            # It is a night
            else:
                day = tmp_datetime.day
                if tmp_datetime.hour < 7:
                    day -= 1
                if day != last_night_charged_day:
                    last_night_charged_day = day
                    # Charge one time night fee
                    charged += NIGHT_FEE
        else:
            # It is a day
            charged += HALFHOUR_RATE
        tmp_datetime += datetime.timedelta(minutes=30)

    return charged

推荐阅读