擅长:python、mysql、java
<p>根据Alex的回答,这里有一个稍微优化和改进的解决方案:</p>
<pre><code>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
</code></pre>