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