我正在尝试根据用户的出生日期获取其年龄。出生日期以 XML 字符串的形式给出,并转换为 Calendar
,如下所示:
final Calendar dob = javax.xml.bind.DatatypeConverter.parseDate(value);
然后我按照以下方式计算用户的年龄:
final Calendar now = Calendar.getInstance();
int age = now.get(Calendar.YEAR) - dob.get(Calendar.YEAR);
if (now.get(Calendar.DAY_OF_YEAR) < dob.get(Calendar.DAY_OF_YEAR)) {
--age;
}
我今天发现,如果今天是用户的生日(别拿出派对帽子,这不是我的生日),年龄会少算一岁。也就是说,如果用户出生于2000年,而今天是她的生日,她应该是14岁,而不是13岁。但归根结底,Java似乎计算DAY_OF_YEAR有误:
System.out.println(String.format("Today: %d-%d; Birthday: %d-%d", now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH), dob.get(Calendar.MONTH), dob.get(Calendar.DAY_OF_MONTH)));
// prints: Today: 9-22; Birthday: 9-22
System.out.println(String.format("Today: %d; Birthday: %d", now.get(Calendar.DAY_OF_YEAR), dob.get(Calendar.DAY_OF_YEAR)));
// prints: Today: 295; Birthday: 296
怎么回事?
java.time
包进行日期计算。 - Mark Rotteveel