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 diffHours = diff / (60 * 60 * 1000) % 24;
long diffMinutes = diff / (60 * 1000) % 60;
if (diffMinutes <= 30) {
total = 20;
}
else if (diffHours <=1){
total = 35;
}
System.out.println("Rs." +total);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
我想要这样的输出: (每小时的固定费率为Rs.35)
30分钟= Rs.20
40分钟= Rs.25等等......
1小时= Rs.35
1小时10分钟= Rs.40
请帮助我,弄清楚我是如何做到的。
答案 0 :(得分:1)
由于费率每10分钟增加5,所以只需使用简单的函数返回费率:
public double rate(int minutes)
{
return 20 + 5*((minutes - 30)/10);
}
计算分钟数,然后将其作为该函数中的参数传递以获得速率。另外,尽量保持代码尽可能短,但同时也要简单。
答案 1 :(得分:0)
如果您需要更灵活而非固定费率的东西,您可以实施具有预定义止损的enum
您可以定义您在给定时间内所需的任何费率。 例如,如果长时间运行的任务应该获得更高的费率(根据你的问题,如果这个比率只是Manish Kundu的答案中的计算值或者如果其他值可能被分配,那么对我来说并不明显。)
使用此代码,您可以为长时间运行jobs
分配更高的费率(例如,在计算机游戏中,更难以实现更高回报率的工作,或者因为玩家花费太多时间而降低费率。 ..)
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
public class TimeMain {
private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("hh.mm.ss[ ]a");
public enum Rate {
STOP0(0, 0, 0), // default
STOP1(0, 30, 20), // 30 mins -> Rs.20
STOP2(0, 40, 25), // 40 mins -> Rs.25
STOP3(1, 0, 35), // 1 hour -> Rs.35
STOP4(1, 10, 40); // 1 hour 10 minutes -> Rs.40
int minutes = 0;
int rate = 0;
/*
* hours is actually not needed as 1h10 = 70mins...
*/
private Rate(int hours, int minutes, int rate) {
this.minutes = minutes + hours * 60;
this.rate = rate;
}
public static Rate from(String timeStart, String timeEnd) {
LocalTime time1 = LocalTime.parse(timeStart.toUpperCase(), dateTimeFormatter);
LocalTime time2 = LocalTime.parse(timeEnd.toUpperCase(), dateTimeFormatter);
long minutesBetween = ChronoUnit.MINUTES.between(time1, time2);
for (int i = 0; i < Rate.values().length; i++) {
Rate r = Rate.values()[i];
if (r.minutes > minutesBetween) {
return Rate.values()[i-1];
}
}
return STOP0;
}
public String toString() {
return String.format("Rs.%s", rate);
}
}
public static void main(String... args) {
String timeStart = "09.30.00 am";
String timeEnd = "10.10.00 am";
System.out.println(Rate.from(timeStart, timeEnd));
}
}