/** * This Method is unit tested properly for very different cases , taking * care of Leap Year days difference in a year, and date cases month and * Year boundary cases (12/31/1980, 01/01/1980 etc) */ public static int getAge(Date dateOfBirth, Date toDate) { if (dateOfBirth.after(toDate)) { throw new IllegalArgumentException("the parameter dateOfBirth[" + dateOfBirth + "] can not be later than toDate[" + toDate + "]"); } Calendar toDateCalendar = Calendar.getInstance(); Calendar birthCalendar = Calendar.getInstance(); birthCalendar.setTime(dateOfBirth); toDateCalendar.setTime(toDate); int age = toDateCalendar.get(Calendar.YEAR) - birthCalendar.get(Calendar.YEAR); // If birth date is greater than todays date (after 2 days adjustment of // leap year) then decrement age one year if ((birthCalendar.get(Calendar.MONTH) > toDateCalendar.get(Calendar.MONTH)) || (birthCalendar.get(Calendar.DAY_OF_YEAR) - toDateCalendar.get(Calendar.DAY_OF_YEAR) > 3)) { age--; // If birth date and todays date are of same month and birth day of // month is greater than todays day of month then decrement age } else if ((birthCalendar.get(Calendar.MONTH) == toDateCalendar.get(Calendar.MONTH)) && (birthCalendar.get(Calendar.DAY_OF_MONTH) > toDateCalendar .get(Calendar.DAY_OF_MONTH))) { age--; } return age; }
public static int age(Date birthDate, Date toDate) { if (birthDate.after(toDate)) { throw new IllegalArgumentException("the parameter birthDate[" + birthDate + "] can not be later than toDate[" + toDate + "]"); } Calendar cal = Calendar.getInstance(); Calendar now = Calendar.getInstance(); cal.setTime(birthDate); now.setTime(toDate); int res = now.get(Calendar.YEAR) - cal.get(Calendar.YEAR); if ((cal.get(Calendar.MONTH) > now.get(Calendar.MONTH)) || (cal.get(Calendar.MONTH) == now.get(Calendar.MONTH) && cal .get(Calendar.DAY_OF_MONTH) > now.get(Calendar.DAY_OF_MONTH))) { res--; } return res; }