Cálculo de la edad, creación de fechas y años bisiestos en Java

CALCULO DE LA EDAD

Tenemos al menos dos formas de calcular la edad en Java:

  1. La podemos calcular en milisegundos, entregando la cuenta exacta de milisegundos desde que la persona nació.
  2. Otra forma un poco más orientada al negocio para el que se esté construyendo el sistema es simplemente entregar el número de años que tiene la persona (como entero), ya que en los procesos financieros muchas veces no cuenta la edad real sino la edad establecida por el uso de la sociedad (en este caso el número de años).

Para la mayoría de casos preferiremos usar el segundo método ya que es la forma común en que entendemos la edad. Veamos esto en detalle (y con código):

Forma 1
Obtendremos la diferencia en milisegundos. Esta cantidad la puedes pasar a segundos, minutos, días o años, de acuerdo a la necesidad específica.

public long calcularEdadEnMilis(Date fechaNacimiento, Date fechaActual) {
    long diferencia = ( fechaActual.getTime() - fechaNacimiento.getTime() )
    return diferencia; 
}

Forma 2
Haremos una resta sencilla: Si ya cumplió años en el año en curso, la edad es la diferencia de años. Si aún no cumple años, la edad es la diferencia de años menos uno. Recordemos que este código podría no aplicar para sociedades con otras formas culturales de calcular la edad (o que usa un calendario distinto a los conocidos).

public int calcularEdad(Date fechaNacimiento, Date fechaActual){
    Calendar fechaAct = Calendar.getInstance();
    fechaAct.setTime(fechaActual);

    Calendar fechaNac = Calendar.getInstance();
    fechaNac.setTime(fechaNacimiento);

    int dif_anios = fechaAct.get(Calendar.YEAR) - fechaNac.get(Calendar.YEAR);
    int dif_meses = fechaAct.get(Calendar.MONTH) - fechaNac.get(Calendar.MONTH);
    int dif_dias = fechaAct.get(Calendar.DAY_OF_MONTH) - fechaNac.get(Calendar.DAY_OF_MONTH);

    //Si está en ese año pero todavía no los ha cumplido
    if(dif_meses<0 || (dif_meses==0 && dif_dias<0)){
        dif_anios--;
    }
    return dif_anios;
}

CREACION DE FECHAS

Sólo por curiosidad: ¿Cómo creas tus fechas?
Una forma correcta de hacerlo es:

public Date crearFechas(int anio, int mes, int dia){
	Calendar fecha = Calendar.getInstance();
	fecha.clear(); //establece valores a 0
	fecha.set(anio, mes-1, dia); //establece año, mes y dia
	return fecha.getTime();
}

AÑOS BISIESTOS

Para saber si un año es bisiesto se puede aplicar una simple formula: Un año es bisiesto si es divisible entre 4, excepto el último de cada siglo (aquel divisible por 100), salvo que este último sea divisible por 400.

if ((anio % 4 == 0) && ((anio % 100 != 0) || (anio % 400 == 0)))
	System.out.println("El año es bisiesto");
else
	System.out.println("El año no es bisiesto");

Pero la mejor forma es usar Java al máximo, así:

public boolean esBisiesto(int anio) {
	GregorianCalendar calendar = new GregorianCalendar();
	return calendar.isLeapYear(anio);
}

(Nótese que esto sólo aplica para calendarios gregorianos)

Algunos enlaces de interés:

  • http://americati.com/blog/?p=79
  • http://draxus.org/weblog/2008/04/15/calcular-edad-en-java/
  • http://lineadecodigo.com/java/ano-bisiesto-en-java/
  • http://es.wikipedia.org/wiki/A%C3%B1o_bisiesto
Sobre nosotros

Arquitecto de Software, siempre explorando nuevas formas de desarrollar con Java Aplicaciones Empresariales

Publicado en: Desarrollo de software, Java, Programación Etiquetado con: , , , , , , , ,

Deja un comentario

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

*


*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>