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

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

首先,您需要确定哪一个比另一个更旧。 然后使用while循环,在其中测试较旧的循环是否after()较新的循环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 

也就是说,Java SE中的DateCalendar API实际上是史诗般的失败。 在规划即将推出的Java 8时,有一个新的Date 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 

更清晰简洁,不是吗?

 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--; } 

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

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

(java.lang.Math中)

或者您可以使用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)更高,则应使用“官方”解决方案。

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