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
答案 0 :(得分:7)
如果您撰写long d=(1000*60*60*24*365);
,则1000*60*60*24*365
的结果将计算为int
,而这对于int
类型来说太大了。您应该使用1000l*60*60*24*365
来计算。
答案 1 :(得分:3)
你可能会惊讶地发现,你不需要知道一年中有多少天或几个月或那几个月有多少天,同样地,你不需要知道闰年,闰秒或使用这种简单,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;
}
答案 2 :(得分:2)
除上述评论中提到的问题外,此行还会导致数字溢出:
long d=(1000*60*60*24*365);
删除该行,然后使用它;你会得到一个大致正确的答案:
long years = Math.round(diff / 1000 / 60 / 60 / 24 / 365);