java - 计算两个相同日期但输入数据格式不同的价格
问题描述
我需要用两个相同的日期但不同的输入数据格式来计算价格。我希望得到同样的结果。如何制作下面提到的代码以使输出相同?
示例代码计算
-
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
-
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.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
修复,根据您的需要改进代码。
推荐阅读
- r - 在 R Shiny 中创建第二个 UI 元素
- sql - 将包含过滤器的 IBM Cognos SQL 转换为 Microsoft SQL Server Query
- typescript - 无法导入与 WebPack 捆绑的 TypeScript 库
- sql - 如何在 oracle 中执行乘法运算?
- python - 如何在 Keras 中输入令牌(int)和二维序列?
- javascript - 我可以让 HTML 颜色输入只显示十六进制吗?
- terraform - 在计数已经使用后在 terraform 中创建条件资源
- android - 为什么我们不应该在 Android 应用程序中显示没有状态栏的操作栏?
- r - 尝试按某个变量 R 的最高数量过滤数据
- python - 表单保存未将用户添加到模型