最近遇到了一个开发问题,要求跟据车辆停车的时间,
完成分时间的收费的功能,要求大概如下图:
其实逻辑上并不算复杂,就是采用if循环或者for each进行分支判断就可以了,但是实际操作时发现了一个问题:如何确定车辆进入车库时属于哪一个时间段呢?我搜索了一些文章,却发现他们解决的是同一天时间判断,而跨天的这种情况却没有考虑。我通过github上找到的几个类似的项目,找到了这样的解决方案:
//自定义时间格式
SimpleDateFormat s1 = new SimpleDateFormat("HH:mm:ss")
//根据信息查出该车辆的入库时间
TbOrder order = countTimeDao.findBeginTime(carNumber);
//获取当前时间
Date date = new Date();
//根据order的开始时间,进行时长的判断
//获取
long beginTime = order.getBeginTime().getTime();
//获取时间戳
Timestamp timestamp = new Timestamp(date.getTime());
long endTime = timestamp.getTime();
//得到时间差
double minute = (double) (endTime - beginTime) / (60 * 1000);
int hour = (int) minute / 60;
//截取当前时间的时分秒并转化为String类型
String formatLoginTime = s1.format(date.getTime());
//设置高峰期时间段
String begin = "09:00:00";
String last = "21:00:00";
//将String类型转化为int类型进行比较
int time = Integer.parseInt(formatLoginTime.replaceAll(":", ""));
int fast = Integer.parseInt(begin.replaceAll(":", ""));
int end = Integer.parseInt(last.replaceAll(":", ""));
if (minute <= 30) {
//根据order的车牌,查出redis中的key值,判断是否收费
//进行时间段判断
if (minute <= 30) {
return R.ok("10");
} else {
return R.ok("0");
}
} else if (30 < minute & hour <= 2) {
return R.ok("10");
} else if (2 < hour & hour <= 4) {
if (fast < time & time < end) {
double sum = ((minute - 120) / 30) * 3 + 10;
String str = String.valueOf(sum);
return R.ok(str);
} else {
double sum = ((minute - 120) / 30) * 2 + 10;
String str = String.valueOf(sum);
return R.ok(str);
}
} else if (hour <= 24) {
if (fast < time & time < end) {
return R.ok("25");
} else {
// double sum = ((minute - 120) / 30) * 2 + 10;
// String str = String.valueOf(sum);
return R.ok("20");
}
} else {
double sum = ((hour / 24) + 1) * 25;
String str = String.valueOf(sum);
return R.ok(str);
}
}