根据时间计算每小时的费率

时间:2018-01-04 08:18:54

标签: java jsp

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

请帮助我,弄清楚我是如何做到的。

2 个答案:

答案 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));
}

}