如何计算2个日期之间的年数差异?

Sco*_*her 14 java

如何计算Java中2个日历之间的年份差异?

Bal*_*usC 21

首先,您需要确定哪一个比另一个更旧.然后使用一个while循环,在其中测试较旧的循环是否是after()较新的循环.在旧版本上调用Calendar#add()one(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
Run Code Online (Sandbox Code Playgroud)

这就是说,DateCalendar在Java SE API的实际上是史诗般的失败.在规划即将推出的Java 8时,有一个新的Date API,JSR-310Joda-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
Run Code Online (Sandbox Code Playgroud)

更清晰简洁,不是吗?

  • 或Years.yearsBetween(myBirthDate,now).getYears(); (6认同)

Kev*_*vin 10

Calendar dobDate; // Set this to date to check
Calendar today = Calendar.getInstance();
int curYear = today.get(Calendar.YEAR);
int curMonth = today.get(Calendar.MONTH);
int curDay = today.get(Calendar.DAY_OF_MONTH);

int year = dobDate.get(Calendar.YEAR);
int month = dobDate.get(Calendar.MONTH);
int day = dobDate.get(Calendar.DAY_OF_MONTH);

int age = curYear - year;
if (curMonth < month || (month == curMonth && curDay < day)) {
    age--;
}
Run Code Online (Sandbox Code Playgroud)

这样可以避免循环,并且应该精确到当天.