下面有代码
结束日期= 2024年10月31日和
elapsedPercentage是当前日期总持续时间的10%
根据上述参数
预期开始日期值为2023年8月12日
但我得到07十二月2023从下面的代码
public static Timestamp calculateStartDate(double elapsedPercentage, Timestamp endDate) {
try {
LocalDate endDates = endDate.toLocalDateTime().toLocalDate();
long elapsedDays = (long) (endDates.lengthOfYear() *((100 - elapsedPercentage) / 100.0));
LocalDate startDate = endDates.minusDays(elapsedDays);
return Timestamp.valueOf(startDate.atTime(LocalTime.MIDNIGHT));
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
2条答案
按热度按时间zi8p0yeb1#
不知道为什么要用
lengthOfYear
计算。您应该计算从现在到结束日期之间的天数,表示为(100 - elapsedPercentage)%
。您可以通过使用java.time.temporal.ChronoUnit
中的DAYS.between()方法来实现这一点。有了它,你可以很容易地得到从现在开始减去的天数,以获得开始日期。例如:blpfk2vs2#
通过这种修改,当您提供10%的经过百分比和“2024-10-31”的结束日期时,代码应该为您提供“2023-08-12”的预期开始日期。