如何计算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中的Date
和Calendar
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)更高,则应使用“官方”解决方案。
如果没有,没有特别的理由为你不会使用的精确度付出额外的努力。