为了账号安全,请及时绑定邮箱和手机立即绑定

Python:如何检查时间是否超过指定时间?

Python:如何检查时间是否超过指定时间?

一只名叫tom的猫 2023-10-26 16:55:55
我正在尝试编写一个停车场收费计算器。提供多种费率:上午 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总结一下:如果停车时间超过晚上 10.30(将收取夜间平价费用),我该如何添加支票如果停车时间超过夜间时间并进入第二天早上7点后,如何添加支票(前一天的日费+夜间费+第二天的日费)
查看完整描述

2 回答

?
森林海

TA贡献2011条经验 获得超2个赞

根据 Alex 的回答,这里有一个稍微优化和改进的解决方案:


import datetime


HALFHOUR_RATE = 0.6

NIGHT_FEE = 5


def get_charge2(start_datetime, end_datetime):

    tmp_datetime = start_datetime

    charged = 0


    while tmp_datetime < end_datetime:

        if tmp_datetime.hour >= 7 and tmp_datetime.hour < 22 or (tmp_datetime.hour == 22 and tmp_datetime.minute < 30):

            # It is a day [7, 22:30)

            charged += HALFHOUR_RATE * 10 # avoid rounding error

            tmp_datetime += datetime.timedelta(minutes=30)

        else:

            # It is a night [22:30, 7)

            charged += NIGHT_FEE * 10  # avoid rounding error

            tmp_datetime += datetime.timedelta(hours=8.5) # night == 8.5 hours

   

    return charged/10 # adjust result


查看完整回答
反对 回复 2023-10-26
?
白板的微信

TA贡献1883条经验 获得超3个赞

最简单的方法是每 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


查看完整回答
反对 回复 2023-10-26
  • 2 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信