使用两个相同日期但不同的输入数据格式计算价格



我需要用两个相同的日期但不同的输入数据格式来计算价格。我希望得到同样的结果。如何制作下面提到的代码,以便输出相同?

样本代码计算

  1. String str="14-04-2021"; // Current date.
    SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy"); 
    Date startDate = df.parse(str);
    output while pricing logic calculation = 43.06
    
  2. Date date = new Date(); // System date.
    while calculating some price logic = 42.904
    
public double getCalculatedProductTotalPriceBasedOnRdd(double prdTotalPrice, String pPMAnnualNetPrice, String rdd) throws ParseException {

Date startDate;
if (null != rdd) {
//startDate=new Date();

SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
startDate = df.parse(rdd);

} else {

startDate = new Date();

}

Calendar cal = Calendar.getInstance();
cal.setTime(startDate);
cal.set(Calendar.MILLISECOND, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.HOUR, 0);
Date sDate=cal.getTime();
int year = cal.get(Calendar.YEAR);
cal.set(Calendar.YEAR, year);

int days = calculateDaysBetweenTwoDates(startDate);
boolean leapYear = cal.getActualMaximum(Calendar.DAY_OF_YEAR) > 365;
if (null != pPMAnnualNetPrice) {
if (leapYear) {
prdTotalPrice = (Double.parseDouble(pPMAnnualNetPrice) * days) / 366;
} else {
prdTotalPrice = (Double.parseDouble(pPMAnnualNetPrice) * days) / 365;
}
}
return prdTotalPrice;
}

开始使用新的java.timeAPI,而不是旧的java.util.Date。有一篇关于这方面的好文章。
以下是演示代码:

public class Test {
public static void main(String[] args) throws Exception {
double price = calculate(42.0, "147", "14-04-2021");
System.out.println(price);
price = calculate(42.0, "147", null);
System.out.println(price);
}
static double calculate(double prdTotalPrice, String pPMAnnualNetPrice, String rdd) {
LocalDate startDate;
if (null != rdd) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
startDate = LocalDate.parse(rdd, formatter);
} else {
startDate = LocalDate.now();
}
// int days = calculateDaysBetweenTwoDates(startDate);
int days = startDate.getDayOfYear();
boolean leapYear = startDate.isLeapYear();
if (null != pPMAnnualNetPrice) {
if (leapYear) {
prdTotalPrice = (Double.parseDouble(pPMAnnualNetPrice) * days) / 366;
} else {
prdTotalPrice = (Double.parseDouble(pPMAnnualNetPrice) * days) / 365;
}
}
return prdTotalPrice;
}
}

输出:

41.88493150684931
41.88493150684931

根据您的需要修复、改进代码。

最新更新