Calcular la edad de una persona en Java de Android

publicado por: Anonymous

¿Cómo se puede obtener la edad de una persona teniendo su fecha de nacimiento en formato Date?

DateFormat dateFormat = dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
Date dob = dateFormat.parse("1989-10-10");

solución

Hay varias formas de hacer el cálculo. He aquí dos de ellas:

  • java.time.chrono.ChronoPeriod

    Desde la API level 26 puede utilizarse el paquete java.time. Ejemplo:

    Código:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd", 
            Locale.getDefault());
    ChronoLocalDate from = ChronoLocalDate.from(formatter.parse("1989-10-10"));
    ChronoLocalDate to = ChronoLocalDate.from(formatter.parse("2017-09-29"));
    ChronoPeriod period = ChronoPeriod.between(from, to);
    
    Formatter fmt = new Formatter();
    if (period.get(ChronoUnit.YEARS) > 0) {
        fmt.format("%d años ", period.get(ChronoUnit.YEARS));
    }
    if (period.get(ChronoUnit.MONTHS) > 0) {
        fmt.format("%d meses ", period.get(ChronoUnit.MONTHS));
    }
    if (period.get(ChronoUnit.DAYS) > 0) {
        fmt.format("%d días ", period.get(ChronoUnit.DAYS));
    }
    System.out.println(fmt.toString());
    

    Salida:

    27 años 11 meses 19 días 
    
  • java.util.GregorianCalendar

    También puede utilizarse java.util.GregorianCalendar, aunque no es tan preciso:

    Código:

    DateFormat dateFormat = dateFormat = new SimpleDateFormat("yyyy-MM-dd", 
            Locale.getDefault());
    Date dob = dateFormat.parse("1989-10-10");
    GregorianCalendar cal = (GregorianCalendar) Calendar.getInstance();
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.clear();
    cal.set(Calendar.YEAR, 0);
    cal.setTimeInMillis( cal.getTimeInMillis() + new Date().getTime() - dob.getTime());
    
    Formatter fmtr = new Formatter();
    if (cal.get(Calendar.YEAR) > 0) {
        fmtr.format("%d años ", cal.get(Calendar.YEAR));
    }
    if (cal.get(Calendar.MONTH) > 0) {
        fmtr.format("%d meses ", cal.get(Calendar.MONTH));
    }
    if (cal.get(Calendar.DAY_OF_MONTH) > 0) {
        fmtr.format("%d días ", cal.get(Calendar.DAY_OF_MONTH));
    }
    System.out.println(fmtr.toString());
    

    Salida:

    27 años 11 meses 21 días 
    
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *