【发布时间】:2021-10-25 15:03:27
【问题描述】:
我需要将两个日期之间的差异计算为一个分数,该分数可用于使用compareTo(....) 进行后续 BigDecimal 比较。
输入日期是java.util.Date,所以我尝试将它们转换为joda.time.DateTime,以获取两个日期之间的numberOfDays,并将结果转换为BigDecimal,以便以后进行比较。
如果我以 2019 年 3 月 30 日的 startServiceDate 和 2021 年 1 月 3 日的 endServiceDate 运行以下命令,我得到的结果为 1。
import java.util.Date;
import org.joda.time.DateTime;
import org.joda.time.Days;
private BigDecimal getNumberOfYearsService(Date startServiceDate, Date endServiceDate) {
DateTime startServiceDateTime = new DateTime(startServiceDate);
DateTime endServiceDateTime = new DateTime(endServiceDate);
int numberOfDays = Days.daysBetween(startServiceDateTime, endServiceDateTime).getDays();
return new BigDecimal(numberOfDays/365);
}
将代码更新为return new BigDecimal(numberOfDays/365).setScale(2,RoundingMode.HALF_UP); 后,我得到1.00 的结果,但如果numberOfDays 是702,我期待1.92 的结果
【问题讨论】:
-
想知道你为什么不使用
java.time...? -
好的,这意味着您可以使用ThreeTen Backport 使
java.time的功能在Java 6 和7 中可用。 -
我想你可以,但 JodaTime 也是一个库,它不是最新的。
-
一个提示:你得到的结果可能是你使用 JodaTime 的正确方式,但不是你使用
BigDecimal的方式,因为你没有 @987654341 @,但实际上你创建了一个new BigDecimal(1),因为702 / 365导致1。这就是为什么您会收到1.00而不是1.92。 -
Joda-Time 确实得到了维护。制作Frequent releases,主要是更新嵌套的tzdata跟踪时区规则。如果您愿意,您可以继续使用 Joda-Time,甚至可以purchase a support plan。但要使用与 java.time 几乎相同的 API 为未来做好准备,请在 Java 6 中使用 ThreeTen-Backport。
标签: java datetime jodatime bigdecimal date-difference