2015-04-21 2 views
1
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; 

Значение возраста не возвращается вправо. Что я делаю не так?Разница дат в Java в годах

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 
+3

«Стоимость возраста не возвращается». За какой вклад и что вы ожидаете? – weston

+0

Вы не получите точный ответ, используя этот метод. Используйте API java.time или, если вы не используете Java 8, используйте threetenbp – fge

+0

Я использую java 7. Я хочу, чтобы возраст был в годах. –

ответ

7

Если вы пишете long d=(1000*60*60*24*365);, результат 1000*60*60*24*365 будет рассчитываться как int, в то время как это слишком большой для int типа. Вы должны использовать 1000l*60*60*24*365 для расчета этого.

+0

Да, это получилось! Большое спасибо!! :) –

+0

Фактически «двойной d = (1000 * 60 * 60 * 24 * 365,25); будет более точным! –

2

, а также вопросы, упомянутые в приведенных выше замечаний, эта строка вызывает переполнение числовой:

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

Удалите эту строку, и использовать это вместо того, чтобы; вы получите примерно правильный ответ:

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

Возможно, удивительно отметить, что вам не нужно знать, сколько дней или месяцев в году или сколько дней в эти месяцы, также вам не нужно знать о високосных годах, прыгать секунд или любой из этих материалов, используя этот простой, 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; 
} 
+0

Я проголосовал за ваш ответ, потому что думал, что это неверно, но я понял, что виноват, и теперь я больше не могу изменить свой голос. –

+0

@SteveS. спасибо steve, я только что отредактировал его, и теперь вы сможете изменить голосование :) – weston

Смежные вопросы