por Zynan el 24 Abr 2011, 13:43
Hola bueno parece que por fin he dado con el código que calcula las diferencias reales entre dos fechas, en mi caso lo realiza entre una introducida por teclado comparándola con la fecha del sistema. Creo que funciona correctamente, pero aquí lo dejo para que me lo podais criticar a gusto.
Un saludo.
Calendar fechaActual=Calendar.getInstance (); //Crea un objeto de la clase Calendar y se inicializa con la fecha actual
int añoActual=fechaActual.get(Calendar.YEAR); //Declara la variable añoActual de tipo integer y la inicializa con el valor del año actual
int mesActual=fechaActual.get(Calendar.MONTH); //Declara la variable mesActual de tipo integer y la inicializa con el valor del mes actual
int diaActual=fechaActual.get(Calendar.DAY_OF_MONTH); //Declara la variable diaActual de tipo integer y la inicializa con el valor del dia actual
int añoIntroducido=ES.leeNº("Introduce el año"); //Pide introducir por teclado el valor del año con el que comparar
int mesIntroducido=ES.leeNº("Introduce el mes"); //Pide introducir por teclado el valor del mes con el que comparar
int diaIntroducido=ES.leeNº("Introduce el dia"); //Pide introducir por teclado el valor del día con el que comparar
int diasTotalesMes = 0;
if (mesIntroducido==2) { //Comprueba si el mes introducido es Febrero
if ((añoIntroducido % 4 == 0) && ((añoIntroducido % 100 != 0) || (añoIntroducido % 400 == 0))) { //Si el mes es Febrero compruebe si es un año bisiesto
diasTotalesMes=29; //Si el año es bisiesto mes tiene 29 días
}
else {
diasTotalesMes=28; //Si no es bisiesto el mes tiene 28 días
}
}
else { //Si el mes introducido no es Febrero
if (mesIntroducido<=7) { //Comprueba si está dentro de los primero 7 meses
if (mesIntroducido%2==0) { //Comprueba si el resto de la división del mes entre dos es igual a cero
diasTotalesMes=30; //Si la condición es verdadera el mes tiene 30 días
}
else { //Si el resto de la división no es igual a cero
diasTotalesMes=31; //El mes tiene 31 días
}
}
else {
if (mesIntroducido>7) { //Si el mes introducido es mayor que 7
if (mesIntroducido%2==0) { //Si el resto de la división del mes entre dos es igual a cero
diasTotalesMes=31; //El mes introducido tiene 31 días
}
else { //Si la condición no se cumple
diasTotalesMes=30; //El mes introducido tiene 30 días
}
}
}
}
int diferenciaAños=0, diferenciaMeses=0, diferenciaDias=0; //Inicializamos las variables de tipo integer a cero para almacenar la diferencia real de los años, meses y años
mesIntroducido-=1; //Igualamos el mes introducido al de la fecha del sistema, en java los meses van del 0-11
//Comprueba que la fecha introducida es menor que la fecha actual
if (añoIntroducido==añoActual && mesIntroducido>mesActual || añoIntroducido==añoActual && mesIntroducido==mesActual && diaIntroducido>diaActual) {
System.out.println ("La fecha introducida no puede ser mayor que la fecha actual"); //Comunica el error por pantalla
}
else { //Si la fecha introducida es mayor que la actual
if (mesIntroducido<=mesActual) { //Comprueba si el mes introducido es menor o igual que el mes actual
diferenciaAños=añoActual-añoIntroducido; //Si la condición es correcta calcula la diferencia de años
if (diaIntroducido<=diaActual) { //Comprueba si el día introducido es menor o igual que el día actual
diferenciaDias=diaActual-diaIntroducido; //Si la condición es cierta calcula la diferencia de días
diferenciaMeses=mesActual-mesIntroducido; //Calcula la diferencia de meses
}
else { //Si el día introducido es mayor que mes actual
if (mesIntroducido==mesActual) { //Comprueba si el mes introducido es igual al mes actual
diferenciaAños-=1; //Resta 1 a la diferencia de años
}
diferenciaDias=diasTotalesMes-(diaIntroducido-diaActual); //Si el día introducido es mayor que el actual calcula la diferencia de los días
diferenciaMeses=(mesActual - mesIntroducido - 1 + 12) % 12; //Calcula la diferencia de los meses
}
}
else { //Si la condición no se cumple el mes introducido es mayor que el actual
diferenciaAños=(añoActual-añoIntroducido)-1; //Calcula la diferencia de años
diferenciaMeses=(mesActual-mesIntroducido)+12; //Calcula la diferencia de meses
if (diaIntroducido<=diaActual) { //Si el mes introducido es mayor y el día introducido es menor o igual que el actual
diferenciaDias=diaActual-diaIntroducido; //Calcula la diferencia de días
}
else { //Si la condición no se cumple el día introducido es mayor que el actual
diferenciaDias=diasTotalesMes-(diaIntroducido-diaActual); //Calcula la diferencia de meses
diferenciaMeses-=1; //Resta 1 a la diferencia de meses
}
}
}
System.out.println ("Años: "+diferenciaAños);
System.out.println ("Meses: "+diferenciaMeses);
System.out.println ("Días: "+diferenciaDias);