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