Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用两个相同的日期但不同的输入数据格式计算价格_Java - Fatal编程技术网

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

Java 使用两个相同的日期但不同的输入数据格式计算价格,java,Java,我需要用两个相同的日期但不同的输入数据格式计算价格。我希望得到同样的结果。如何使下面提到的代码输出应该是相同的 示例代码计算 开始使用新的java.timeAPI,而不是旧的java.util.Date。关于这一点,有一个很好的解释。 以下是演示代码: public class Test { public static void main(String[] args) throws Exception { double price = calculate(42.

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

示例代码计算


  • 开始使用新的
    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
    

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

    onkar ruikar-非常感谢您在这方面的快速响应和帮助
    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;
    }
    
    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