Java 年的日期差异

Difference of Dates in Java in Years

Date currentDate=new Date();
DateFormat formatter=new SimpleDateFormat("dd-MM-yyyy");; 
Date date =(Date)formatter.parse(birthDate);     //birthDate is a String, in format dd-MM-yyyy
long diff = currentDate.getTime() - date.getTime();
long d=(1000*60*60*24*365);
long years = Math.round(diff / d);
age=(int) years;

年龄值返回不正确。我做错了什么?

Enter your birthdate: (in format dd-MM-yyyy)
25-07-1992
Current Date: Tue Apr 21 14:05:19 IST 2015
Birthday: Sat Jul 25 00:00:00 IST 1992

Output: Age is: 487

以及上面评论中提到的问题,这一行导致数字溢出:

long d=(1000*60*60*24*365);

删除那一行,改用它;你会得到一个大致正确的答案:

long years = Math.round(diff / 1000 / 60 / 60 / 24 / 365);

如果你写 long d=(1000*60*60*24*365);1000*60*60*24*365 的结果将被计算为 int,而这对于 int 类型来说太大了。你应该使用1000l*60*60*24*365来计算这个。

您可能会惊讶地发现,您不需要知道一年中有多少天或几个月或这些月份有多少天,同样,您也不需要知道闰年,闰秒,或任何使用这种简单、100% 准确方法的东西:

public static int age(Date birthday, Date date) {
    DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
    int d1 = Integer.parseInt(formatter.format(birthday));
    int d2 = Integer.parseInt(formatter.format(date));
    int age = (d2-d1)/10000;
    return age;
}