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

时间:2010-05-17 00:46:39

标签: java

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

4 个答案:

答案 0 :(得分:21)

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

也就是说,Java SE中的DateCalendar 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

更清晰简洁,不是吗?

答案 1 :(得分: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--;
}

这可以避免循环,并且应该准确到当天。

答案 2 :(得分:2)

double diff = d2.getTime() - d1.getTime();
double d = 1000 * 60 * 60 * 24 * 365;
return (int) Math.round(diff / d);

(java.lang.Math中)

答案 3 :(得分:0)

或者你可以使用Calendar.getTimeInMillis()

long msYear = 1000L * 60 * 60 * 24 * 365;
long msDiff = c2.getTimeInMillis() - c1.getTimeInMillis();
System.out.println("Years diff: " + String.valueOf(msDiff / msYear));

修改 这忽略了闰年。但是,如果你正在寻找一个年数的整数表示,闰年与短于半个世纪的时期无关。

例如,这对于计算某人的年龄非常准确。但不够准确,无法告诉他们的生日。

如果您需要的年份差异超过人类寿命中的三位有效数字(大约80.00岁对80.05),您应该使用“官方”解决方案。

如果没有,没有特别的理由为你不会使用的精确度付出额外的努力。