Как создать метод для метода расчета возраста в android

Я хочу написать метод для расчета возраста с даты рождения, является правильной логикой и как записать его в android Java:

public int calculateAge(String birthday){ 
 // consider that birthday format is ddmmyyyy;

 String today = SystemDate(ddmmyyyy);
 int bDay = birthday(1,2).toInteger;
 int bMonth = birthday(3,4).toInteger;
 int bYear = birhtday(5,8).toInteger;

 int tDay = today(1,2).toInteger;
 int tMonth = today(3,4).toInteger;
 int tYear = today(5,8).toInteger;

 if (tMonth == bMonth){
     if (tday>= bDay){ 
        age = tYear - bYear;
      else 
        age = tYear - bYear - 1;}
 else
   if (tMonth > bMonth) {
       age = tYear - bYear;
   else 
       age = tYear - bYear - 1;}
 }
 return age;
}

Ответы

Ответ 1

Вот мое решение проблемы:

/**
 * Method to extract the user age from the entered Date of Birth.
 * 
 * @param DoB String The user date of birth.
 * 
 * @return ageS String The user age in years based on the supplied DoB.
 */
private String getAge(int year, int month, int day){
    Calendar dob = Calendar.getInstance();
    Calendar today = Calendar.getInstance();

    dob.set(year, month, day); 

    int age = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR);

    if (today.get(Calendar.DAY_OF_YEAR) < dob.get(Calendar.DAY_OF_YEAR)){
        age--; 
    }

    Integer ageInt = new Integer(age);
    String ageS = ageInt.toString();

    return ageS;  
}

Я использовал DatePicker, чтобы получить требуемые здесь входные значения. Этот метод вместе с подборщиком даты специально предназначен для получения пользовательской DoB и расчета их возраста. Можно внести небольшую модификацию, позволяющую вводить строки ввода-вывода пользователя DoB в зависимости от конкретной реализации. Возвращаемый тип String предназначен для обновления TextView, может быть сделан небольшой мод, чтобы можно было также выводить вывод типа int.

Ответ 2

Это работает отлично.....

public int getAge(int DOByear, int DOBmonth, int DOBday) {

        int age;

        final Calendar calenderToday = Calendar.getInstance();
        int currentYear = calenderToday.get(Calendar.YEAR);
        int currentMonth = 1 + calenderToday.get(Calendar.MONTH);
        int todayDay = calenderToday.get(Calendar.DAY_OF_MONTH);

        age = currentYear - DOByear;

        if(DOBmonth > currentMonth){
            --age;
        }
        else if(DOBmonth == currentMonth){
            if(DOBday > todayDay){
                --age;
            }
        }
        return age;
    }

Ответ 3

Вот пример возрастного расчета Android, с которым вы должны работать:

    public int getAge (int _year, int _month, int _day) {

            GregorianCalendar cal = new GregorianCalendar();
            int y, m, d, a;         

            y = cal.get(Calendar.YEAR);
            m = cal.get(Calendar.MONTH);
            d = cal.get(Calendar.DAY_OF_MONTH);
            cal.set(_year, _month, _day);
            a = y - cal.get(Calendar.YEAR);
            if ((m < cal.get(Calendar.MONTH))
                            || ((m == cal.get(Calendar.MONTH)) && (d < cal
                                            .get(Calendar.DAY_OF_MONTH)))) {
                    --a;
            }
            if(a < 0)
                    throw new IllegalArgumentException("Age < 0");
            return a;
    }

Ответ 4

Вот полностью протестированный и рабочий код

Ниже приведен пример диалога выбора даты

@Override
    public void onDateSet(DatePicker view, int mBirthYear, int mMonthOfYear, int mDayOfMonth) 
    {
            mAge = year - mBirthYear;

            if( (mMonthOfYear == month && day < mDayOfMonth) || ( month < mMonthOfYear) ) 
            {
                mAge--;
            }

            String years = getString(R.string.years);

            etAge.setText(mAge+years);      

    }

Ответ 5

Ни один из опубликованных решений не работал у меня. Итак, я работал над своей собственной логикой и получил это, что для меня работает на 100%:

 Integer getAge(Integer year, Integer month, Integer day) {
     Calendar dob = Calendar.getInstance();
     Calendar today = Calendar.getInstance();

     dob.set(year, month, day);
     int age = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR);

     if(month == (today.get(Calendar.MONTH)+1) && day > today.get(Calendar.DAY_OF_MONTH)) {
         age--;
     }

     return age;
 }

Ответ 6

private String getAge(int year, int month, int day){

  Calendar dob = Calendar.getInstance();

  Calendar today = Calendar.getInstance();

  dob.set(year, month, day);

  today.set(today.get(Calendar.YEAR), today.get(Calendar.MONTH) + 1,
    today.get(Calendar.DATE));

  int age = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR);

  if (today.get(Calendar.DAY_OF_YEAR) < dob.get(Calendar.DAY_OF_YEAR)) {

    age--;

  }

  Integer ageInt = new Integer(age);

  String ageS = ageInt.toString();

  return ageS;
}