Java 如何计算两个日期之间的年数差?

Java 如何计算两个日期之间的年数差?,java,Java,如何计算Java中两个日历之间的年数差异?首先,您需要确定哪一个日历比另一个日历旧。然后使用while循环,测试旧的不是新的。用一个(1)调用旧的一个来添加年份。准备一个计数器来计算年份 启动示例: Calendar myBirthDate = Calendar.getInstance(); myBirthDate.clear(); myBirthDate.set(1978, 3 - 1, 26); Calendar now = Calendar.getInstance(); Calendar

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

首先,您需要确定哪一个日历比另一个日历旧。然后使用
while
循环,测试旧的不是新的。用一个(
1
)调用旧的一个来添加年份。准备一个计数器来计算年份

启动示例:

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

这就是说,JavaSE中的
Date
Calendar
API实际上是史诗般的失败。在计划即将推出的Java8时,有一个新的DateAPI,它非常类似于。到目前为止,您可能需要考虑JoDA时间,因为它确实简化了日期/时间的计算/修改。下面是一个使用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

更清晰、更简洁,不是吗?

或者您可以使用日历。getTimeInMillis():

编辑 这忽略了闰年。但是,如果你在寻找一个整数来表示年数,那么闰年对于短于半个千年左右的时期来说是无关紧要的

例如,这对于计算某人的年龄来说是非常精确的。但不够准确,无法说出他们的生日

如果您需要您的年差比人类寿命内的三个有效数字更精确(大约80.00年比80.05年),您应该使用“官方”解决方案

如果没有,就没有特别的理由为不打算使用的精度付出额外的努力。

Calendar dobDate;//将此设置为“日期”以进行检查
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--;
}
Calendar today=Calendar.getInstance(); int curYear=today.get(Calendar.YEAR); int curMonth=today.get(Calendar.MONTH); int curDay=today.get(Calendar.DAY\u/u月); int year=dobDate.get(Calendar.year); int month=dobDate.get(Calendar.month); int day=dobDate.get(日历.月的第天); int age=curYear-year; if(curMonth
这避免了循环,应该准确到当天

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

(java.lang.Math)

这能解释闰年、闰分钟等吗?不。假设你在寻找几年的时间,你不会过分担心一两天的不匹配。如果你在维基百科中查找一年的确切长度,从长远来看,你可以得到你想要的最接近的长度;我无法创建周期对象。它在java.util.time下似乎是私有的。。。您能帮我解决一下吗?我怎样才能用Period找出年份的差异???@Mr.Noddy:代码片段是JodaTime而不是JavaTime。在JavaTime中,使用
Period#between()
。另请参见javadoc注释:小心闰年和其他类似的日历怪事。
double diff = d2.getTime() - d1.getTime();
double d = 1000 * 60 * 60 * 24 * 365;
return (int) Math.round(diff / d);