首页 > 解决方案 > 计算两个相同日期但输入数据格式不同的价格

问题描述

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

示例代码计算

  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

解决方案


开始使用新java.time的 API,而不是旧的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

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


推荐阅读