Hola a todos, hoy os voy a explicar como podemos obtener la diferencia de años entre 2 objetos Date en Java.
Es posible que en algún momento necesites calcular la diferencia entre 2 objetos Date, tenemos varias formas de hacerlo.
Sino sabéis como funciona la clase Date, aquí os dejo un pequeño tutorial:
Una cosa a tener en cuenta, es que cuando dos años tienen meses diferentes según el mes restaremos un año o no. Por ejemplo, sí tenemos estas dos fechas: 15/07/2017 y 30/03/2021, la diferencia de años es de 3 años, ya que no llega a 4 años realmente.
En los siguientes ejemplos, vamos a tener como referencia que el día de hoy es 02/12/2021, ya que según el día ejecutado puede cambiar el resultado.
- Pasando 3 parámetros numéricos (dia, mes, año): calculamos la diferencia de años entre un día concreto y la fecha de hoy. Veamos un ejemplo aplicado:
import java.util.Date; public class EjemploDiferenciaAnios { public static void main(String[] args) { int diferencia = calcularAniosDate(31, 12, 2017); System.out.println("Diferencia de años: " + diferencia); } /** * Indica la diferencia de años entre un dia concreto y la fecha actual * Hecho con Date * * @param dia * @param mes * @param anio * @return */ public static int calcularAniosDate(int dia, int mes, int anio) { //Fecha actual Date actual = new Date(); //Cojo los datos necesarios int diaActual = actual.getDate(); int mesActual = actual.getMonth() + 1; int anioActual = actual.getYear() + 1900; //Diferencia de años int diferencia = anioActual - anio; // Si la diferencia es diferencia a 0 if (diferencia != 0) { // Si la diferencia es diferencia a 0 if (diferencia != 0) { //Si el mes actual es menor que el que me pasan le resto 1 //Si el mes es igual y el dia que me pasan es mayor al actual le resto 1 //Si el mes es igual y el dia que me pasan es menor al actual no le resto 1 if (mesActual <= mes) { if (mesActual == mes) { if (dia > diaActual) { diferencia--; } } else { diferencia--; } } } return diferencia; } }
- Pasando 1 parámetro Date: calculamos la diferencia de años entre un día concreto y la fecha de hoy. Veamos un ejemplo aplicado:
import java.util.Date; public class EjemploDiferenciaAnios { public static void main(String[] args) { Date fecha = new Date(117, 11, 31); int diferencia = calcularAniosDate(fecha); System.out.println("Diferencia de años: " + diferencia); } /** * Indica la diferencia de años entre un dia concreto y la fecha actual * Hecho con Date * * @param fecha * @return */ public static int calcularAniosDate(Date fecha) { //Fecha actual Date actual = new Date(); //Cojo los datos necesarios int diaActual = actual.getDate(); int mesActual = actual.getMonth() + 1; int anioActual = actual.getYear() + 1900; //Diferencia de años int diferencia = anioActual - (fecha.getYear() + 1900); // Si la diferencia es diferencia a 0 if (diferencia != 0) { //Si el mes actual es menor que el que me pasan le resto 1 //Si el mes es igual y el dia que me pasan es mayor al actual le resto 1 //Si el mes es igual y el dia que me pasan es menor al actual no le resto 1 if (mesActual <= (fecha.getMonth() + 1)) { if (mesActual == (fecha.getMonth() + 1)) { if (fecha.getDate() > diaActual) { diferencia--; } } else { diferencia--; } } } return diferencia; } }
- Pasando 2 parámetros Calendar: calculamos la diferencia de años entre dos calendar. Veamos un ejemplo aplicado:
import java.util.Date; public class EjemploDiferenciaAnios { public static void main(String[] args) { Date inicio = new Date(117, 11, 31); Date fin = new Date(121, 11, 2); int diferencia = calcularAniosDate(inicio, fin); System.out.println("Diferencia de años: " + diferencia); } /** * Indica la diferencia de años entre un dia concreto y la fecha actual * Hecho con Date * * @param inicio * @param fin * @return */ public static int calcularAniosDate(Date inicio, Date fin) { //Diferencia de años int diferencia = (fin.getYear() + 1900) - (inicio.getYear() + 1900); // Si la diferencia es diferencia a 0 if (diferencia != 0) { //Si el mes actual es menor que el que me pasan le resto 1 //Si el mes es igual y el dia que me pasan es mayor al actual le resto 1 //Si el mes es igual y el dia que me pasan es menor al actual no le resto 1 if ((inicio.getMonth() + 1) <= (fin.getMonth() + 1)) { if ((inicio.getMonth() + 1) == (fin.getMonth() + 1)) { if (inicio.getDate() > fin.getDate()) { diferencia--; } } else { diferencia--; } } } return diferencia; } }
Este es el resultado en todos los casos:
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta