基于阶梯时长计算小时费率的Java代码修改需求
修正Java阶梯计费代码以匹配需求
首先,咱们先明确你需要的阶梯计费规则:
- 30分钟及以内:Rs.20
- 每额外增加10分钟(不足10分钟按10分钟算),费用增加Rs.5(比如40分钟→Rs.25,50分钟→Rs.30)
- 1小时(60分钟):Rs.35
- 1小时10分钟(70分钟):Rs.40,以此类推
原来的代码只处理了两种简单情况,无法覆盖中间的阶梯区间,下面是修改后的完整代码:
import java.text.SimpleDateFormat; import java.util.Date; public class Rate_Per_Hour { public static void main(String[] args) { String TimeStart = "09.30.00 am"; String TimeEnd = "10.10.00 am"; SimpleDateFormat format = new SimpleDateFormat("hh.mm.ss a"); int total = 0; Date d1 = null; Date d2 = null; try { d1 = format.parse(TimeStart); d2 = format.parse(TimeEnd); long diff = d2.getTime() - d1.getTime(); // 计算总时长(转换为分钟数) long totalMinutes = diff / (60 * 1000); // 按照阶梯规则计算费用 if (totalMinutes <= 30) { total = 20; } else { // 计算超过30分钟的部分 int extraMinutes = (int) (totalMinutes - 30); // 向上取整计算需要额外收费的10分钟区间数(不满10分钟按一个区间算) int extraIntervals = (extraMinutes + 9) / 10; total = 20 + extraIntervals * 5; } System.out.println("Rs." + total); } catch (Exception e) { e.printStackTrace(); } } }
关键修改说明:
- 统一时长计算:把原来分开计算小时和分钟的逻辑,改为直接计算总分钟数,这样更便于阶梯计费的判断。
- 完善阶梯逻辑:
- 30分钟及以内直接收取Rs.20
- 超过30分钟的部分,用
(extraMinutes +9)/10实现向上取整,确保哪怕多1分钟也按一个10分钟区间收费,再按照每区间加5Rs的规则计算总费用。
测试你给的示例场景:
- 09:30到10:10,总时长40分钟,计算后费用为Rs.25,完全符合规则;
- 1小时(60分钟),总费用为20 + (30/10)*5 = 35Rs,正确;
- 1小时10分钟(70分钟),总费用为20 + (40/10)*5 =40Rs,匹配需求。
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

