我想找到一个人的年龄 - 给定他的生日(年、月、日)。如何使用 ThreeTenBP 做到这一点?
编辑:我发现的一个选项是这样的
LocalDate birthdate = LocalDate.of(year, month, day);
return (int) birthdate.until(LocalDate.now(), ChronoUnit.YEARS);
我想找到一个人的年龄 - 给定他的生日(年、月、日)。如何使用 ThreeTenBP 做到这一点?
编辑:我发现的一个选项是这样的
LocalDate birthdate = LocalDate.of(year, month, day);
return (int) birthdate.until(LocalDate.now(), ChronoUnit.YEARS);
您的代码在大多数国家/地区都是正确的。它假设 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 中计算某人的年龄?