Как создать метод для метода расчета возраста в 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;
}