Solución:
Aquí hay un método Java llamado getAge que toma enteros para el año, mes y día y devuelve un tipo de cadena que contiene un número entero que representa la edad en años.
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;
}
private int getAge(String dobString){
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try {
date = sdf.parse(dobString);
} catch (ParseException e) {
e.printStackTrace();
}
if(date == null) return 0;
Calendar dob = Calendar.getInstance();
Calendar today = Calendar.getInstance();
dob.setTime(date);
int year = dob.get(Calendar.YEAR);
int month = dob.get(Calendar.MONTH);
int day = dob.get(Calendar.DAY_OF_MONTH);
dob.set(year, month+1, 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--;
}
return age;
}
java.time
Por el sabio de la integridad y estar actualizado con respecto a los paquetes, esta es la forma de usar java.time
(Java 8+).
Java
public int getAge(int year, int month, int dayOfMonth) {
return Period.between(
LocalDate.of(year, month, dayOfMonth),
LocalDate.now()
).getYears();
}
Kotlin
fun getAge(year: Int, month: Int, dayOfMonth: Int): Int {
return Period.between(
LocalDate.of(year, month, dayOfMonth),
LocalDate.now()
).years
}
Ambos fragmentos necesitan las siguientes importaciones de java.time
:
import java.time.LocalDate;
import java.time.Period
No se recomienda usar java.util.Date
y java.util.Calendar
más, excepto en situaciones en las que tenga que involucrar cantidades considerablemente grandes de código heredado.
Consulte también el Tutorial de Oracle.
Para proyectos compatibles con Java 6 o 7, esta funcionalidad está disponible a través de ThreeTenBP,
si bien hay una versión especial, ThreeTenABP para niveles de API por debajo de 26 en Android.
ACTUALIZAR
Ahora hay API Desugaring en Android, lo que hace (un subconjunto de) java.time
directamente disponible (ya no se necesita una biblioteca de backport) a niveles de API por debajo de 26 (no realmente hasta la versión 1, pero funcionará para la mayoría de los niveles de API que deberían ser compatibles hoy en día).