Java 8 用于计算小数年龄的日期时间

Java 8 Date time for calculating age in decimals

我是使用 Java 8 日期时间 API 的新手,我想知道如何计算小数年龄 returns double 值,如 30.5,这意味着 30岁零六个月?例如,下面的示例代码使我的输出为 30.0,但不是 30.5,这可能是我正在尝试的。

LocalDate startDate = LocalDate.of(1984, Month.AUGUST, 10);
LocalDate endDate = LocalDate.of(2015, Month.JANUARY, 10);

double numberOfYears = ChronoUnit.YEARS.between(startDate, endDate);

System.out.println(numberOfYears); //Getting output as 30.0 but not 30.5 

JavaDoc for ChronoUnitbetween 方法明确指出:

The calculation returns a whole number, representing the number of complete units between the two temporals.

所以你不能通过查询之间的年份来获得 30.5。它只会给你整数 -- 30.

但是您可以做的是获取月份并除以 12。为了更精确,您可以改为使用天,甚至更小的单位。

LocalDate startDate = LocalDate.of(1984, Month.AUGUST, 10);
LocalDate endDate = LocalDate.of(2015, Month.JANUARY, 10);

double numberOfMonths = ChronoUnit.MONTHS.between(startDate, endDate) / 12.0;
System.out.println(numberOfMonths); // prints 30.416666666666668

(如果您的 endDateFebruary 10, 2015,那么它会打印 30.5....)