如何计算Java中2个日历之间的年份差异?
答案 0 :(得分:21)
首先,您需要确定哪一个比另一个更旧。然后使用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
也就是说,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
更清晰简洁,不是吗?
答案 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),您应该使用“官方”解决方案。
如果没有,没有特别的理由为你不会使用的精确度付出额外的努力。