Сначала вам нужно определить, какой из них старше другого. Затем используйте цикл while
, в котором вы проверяете, является ли более старый after()
более новым. Вызвать Calendar#add()
с одним (1
) Calendar.YEAR
на старшем, чтобы добавить годы. Держите счетчик для подсчета лет.
Пример запуска:
Calendar myBirthDate = Calendar.getInstance();
myBirthDate.clear();
myBirthDate.set(1978, 3 - 1, 26);
Calendar now = Calendar.getInstance();
Calendar clone = (Calendar) myBirthDate.clone(); // Otherwise changes are been reflected.
int years = -1;
while (!clone.after(now)) {
clone.add(Calendar.YEAR, 1);
years++;
}
System.out.println(years); // 32
Тем не менее, API Date
и Calendar
в Java SE на самом деле являются эпическими сбоями. В планировании будущей Java 8 появился новый API даты, JSR-310 , который очень похож на Joda-Time . На данный момент вы можете рассмотреть Joda-Time, поскольку он действительно облегчает вычисления / модификации даты / времени, подобные этой. Вот пример использования Joda-Time:
DateTime myBirthDate = new DateTime(1978, 3, 26, 0, 0, 0, 0);
DateTime now = new DateTime();
Period period = new Period(myBirthDate, now);
int years = period.getYears();
System.out.println(years); // 32
Гораздо яснее и лаконичнее, не так ли?