0

我想找到一个人的年龄 - 给定他的生日(年、月、日)。如何使用 ThreeTenBP 做到这一点?

编辑:我发现的一个选项是这样的

    LocalDate birthdate = LocalDate.of(year, month, day);
    return (int) birthdate.until(LocalDate.now(), ChronoUnit.YEARS);
4

1 回答 1

1

您的代码在大多数国家/地区都是正确的。它假设 2 月 29 日出生的人在非闰年的 3 月 1 日生日。阅读维基百科

然而,这使得 ThreeTen 与自己不一致,不像 Joda-time。

// if birthdate = LocalDate.of(2012, Month.FEBRUARY, 29);
System.out.println (birthdate.until(birthdate.plusYears(1), ChronoUnit.YEARS)); // display 0

如果您希望 getAge() 与 plusYears() 对称,您可以编写:

public static int getAge(LocalDate birthdate, LocalDate today)
{
  int age = today.getYears() - birthdate.getYears();
  if (birthdate.plusYears(age).isAfter(today))
      age--;
  return age;
}

另请参阅:如何在 Java 中计算某人的年龄?

于 2016-04-12T22:37:28.330 回答