我编写了一个简单的时间API调用,以获取两个月之间的月数和年数
LocalDate
然而,当我做测试时,这些数字似乎计算不正确。
https://repl.it/@trajano/LocalDate-Period-Ages?language=java
import java.time.*;
import java.time.temporal.*;
import static org.junit.Assert.assertEquals;
class Main {
public static void main(String[] args) {
{
User user = new User();
user.setDateOfBirth(LocalDate.of(2014, 11, 11));
assertEquals(0, user.getAgeInMonths(LocalDate.of(2014, 11, 11)));
assertEquals(0, user.getAgeInMonths(LocalDate.of(2014, 11, 12)));
assertEquals(0, user.getAgeInMonths(LocalDate.of(2014, 12, 10)));
assertEquals(1, user.getAgeInMonths(LocalDate.of(2014, 12, 11)));
assertEquals(1, user.getAgeInMonths(LocalDate.of(2014, 12, 25)));
assertEquals(1, user.getAgeInMonths(LocalDate.of(2015, 1, 6)));
assertEquals(1 + 12, user.getAgeInMonths(LocalDate.of(2016, 1, 6)));
assertEquals(1 + 12 * 2, user.getAgeInMonths(LocalDate.of(2017, 1, 6)));
assertEquals(1 + 12 * 3, user.getAgeInMonths(LocalDate.of(2018, 1, 6))); }
}
}
class User {
LocalDate dateOfBirth;
public void setDateOfBirth(LocalDate dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
public int getAge(final LocalDate processingDate) {
return (int) Period.between(dateOfBirth, processingDate.plusDays(1)).get(ChronoUnit.YEARS);
}
public int getAgeInMonths(final LocalDate processingDate) {
return (int) Period.between(dateOfBirth, processingDate.plusDays(1)).get(ChronoUnit.MONTHS);
}
public int getAge() {
return getAge(LocalDate.now());
}
public int getAgeInMonths() {
return getAgeInMonths(LocalDate.now());
}
}
我两个都试过了
Period.
和
ChronoUnit.MONTHS
但断言失败了。使用中的代码
Java Time period in decimal number of years
Java 8 Date time for calculating age in decimals
return (int) Period.between(dateOfBirth, processingDate.plusDays(1)).get(ChronoUnit.MONTHS);
和
return (int) ChronoUnit.MONTHS.between(dateOfBirth, processingDate.plusDays(1));
更新:我在断言上犯了一个错误。所以我把它们修好了。