37,744
社区成员




# coding=UTF-8
import time
import datetime
import math
#把字符串转成datetime
def string_toDatetime(string):
return datetime.datetime.strptime(string, "%Y-%m-%d %H:%M:%S")
def string_toTimestamp(strTime):
return time.mktime(string_toDatetime(strTime).timetuple())
def Fee(time1,time2,flag):
times = time2 - time1
days = times.days
hours = days * 24 + times.seconds / 3600.00
fee_hours = int(math.ceil(hours))
fee_hours = fee_hours
hour1 = time1.hour
hour2 = time2.hour
fee = 0
# 如果flag = 1 表示第二日时间段,没有免费15分钟。
if hours >= 0.25 or flag == 1:
# 大于15分钟
d_fee = 0
n_fee = 0
# 计算费用
time_i = time1
while time_i < time2:
hour_i = time_i.hour
if hour_i >= 7 and hour_i < 22:
d_fee = d_fee + 4
if hour_i < 7 or hour_i >= 22:
n_fee = n_fee + 4
time_i = time_i + datetime.timedelta(hours=1)
if n_fee > 8:
n_fee = 8
fee = d_fee + n_fee
print " %s-%s 停车%s小时,收费%d小时,日间%d元, 夜间%d元, 停车费:%d元" % (time1,time2,hours, fee_hours, d_fee, n_fee, fee)
else:
print "免费"
return fee
def check_fee(time1,time2,flag):
timei = time1
if (timei < time2):
# 以7点为节点,递归计算
timei_next = string_toDatetime((timei + datetime.timedelta(days=1)).strftime("%Y-%m-%d") + " 07:00:00")
if timei_next < time2:
park_fee = Fee(time1, timei_next+ datetime.timedelta(seconds=-1), flag)+check_fee(timei_next,time2,1)
else:
park_fee = Fee(time1, time2, 0)
return park_fee
else:
return 0
time_in = "2018-01-02 16:20:00"
time_out = "2018-01-03 08:30:00"
time1 = string_toDatetime(time_in)
time2 = string_toDatetime(time_out)
# 递归计算车费
park_fee = check_fee(time1,time2,0)
print "停车费总计:%d元" % park_fee
验证了一下,应该是符合计算规则了
你自己把 print xxx 改成 print(xxx)
print("停车%s小时,收费%d小时,日间%d元, 夜间%d元,多夜间%d元,停车费:%d元" %(hours,fee_hours,d_fee, n_fee,n_fee_days,fee))
else:
print ("免费")
# coding=UTF-8
import time
import datetime
import math
#把字符串转成datetime
def string_toDatetime(string):
return datetime.datetime.strptime(string, "%Y-%m-%d %H:%M:%S")
def string_toTimestamp(strTime):
return time.mktime(string_toDatetime(strTime).timetuple())
time_in = "2018-02-01 21:30:00"
time_out = "2018-02-04 12:40:00"
time1 = string_toDatetime(time_in)
time2 = string_toDatetime(time_out)
times = time2 - time1
days = times.days
hours = days*24 + times.seconds/3600.00
fee_hours = int(math.ceil(hours))
fee_hours = fee_hours
# print hours,fee_hours
hour1 = time1.hour
hour2 = time2.hour
if fee_hours-hours > 0 :
hour2 = hour2 +1
# print "停车时间 " , hour1,hour2 , hours
if hours>=0.25 :
# 大于15分钟
fee = 0
d_fee = 0
n_fee = 0
n_fee_days = 0
day_i = 0
# 计算费用
hour_i = hour1
for i in range(fee_hours):
if hour_i>=7 and hour_i<22 :
d_fee = d_fee + 4
if hour_i<7 :
n_fee = n_fee + 4
if hour_i>=22 :
n_fee = n_fee + 4
hour_i = hour_i+1
if hour_i == 24:
hour_i = 0
if hour_i == 7 :
# 判断过夜费优惠。处理多夜停车
if n_fee>0 :
if n_fee >8:
n_fee_days = n_fee_days+8
else:
n_fee_days = n_fee_days+n_fee
n_fee = 0
# print n_fee_days,d_fee,n_fee
if n_fee >8 :
n_fee = 8
fee = d_fee + n_fee+n_fee_days
# print time1.hour , time2.hour
print "停车%s小时,收费%d小时,日间%d元, 夜间%d元,多夜间%d元,停车费:%d元" %(hours,fee_hours,d_fee, n_fee,n_fee_days,fee)
else:
print "免费"
考虑了多时段停车, 即跨了几个夜间停车的情况。
不知道有没有没考虑到的情况。
>>> import datetime
>>> dt1 = datetime.datetime.strptime('2018-2-1 21:30:00', '%Y-%m-%d %H:%M:%S')
>>> dt2 = datetime.datetime.strptime('2018-2-2 12:40:00', '%Y-%m-%d %H:%M:%S')
>>> delta = dt2-dt1
>>> delta.seconds/3600
15.166666666666666