Saltar al contenido

Calcular la edad a partir de la fecha de nacimiento

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).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *