Hola a todos, hoy os voy a explicar como podemos obtener la diferencia de años entre 2 objetos de Calendar en Java.
Es posible que en algún momento necesites calcular la diferencia entre 2 objetos Calendar, tenemos varias formas de hacerlo.
Sino sabéis como funciona la clase Calendar, 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 (creando un calendar con los parámetros pasados) y la fecha de hoy. Veamos un ejemplo aplicado:
import java.util.Calendar; public class EjemploDiferenciaAnios { public static void main(String[] args) { int dia = 31; int mes = 12; int anio = 2017; int diferencia = calcularAniosCalendar(dia, mes, anio); System.out.println("Diferencia de " + diferencia + " años"); } /** * Indica la diferencia de años entre un dia concreto y la fecha actual * Hecho con Calendar * * @param dia * @param mes * @param anio * @return */ public static int calcularAniosCalendar(int dia, int mes, int anio) { // Seteamos el dia mes y año Calendar inicio = Calendar.getInstance(); inicio.set(anio, mes - 1, dia); // Dia actual Calendar actual = Calendar.getInstance(); // Calcula la diferencia de años int diferencia = actual.get(Calendar.YEAR) - inicio.get(Calendar.YEAR); // Si la diferencia de años es 0, no hay que restar nada // Si el año del dia de la fecha que yo paso es mayor que la actual, resto uno if (diferencia != 0 && inicio.get(Calendar.DAY_OF_YEAR) > actual.get(Calendar.DAY_OF_YEAR)) { diferencia--; } return diferencia; } }
- Pasando 1 parámetro Calendar: calculamos la diferencia de años entre un día concreto (el calendar que hemos pasado) y la fecha de hoy. Veamos un ejemplo aplicado:
import java.util.Calendar; public class EjemploDiferenciaAnios { public static void main(String[] args) { Calendar c = Calendar.getInstance(); c.set(Calendar.DATE, 31); c.set(Calendar.MONTH, 11); c.set(Calendar.YEAR, 2021); int diferencia = calcularAniosCalendar(c); System.out.println("Diferencia de " + diferencia + " años"); } /** * Indica la diferencia de años entre un dia concreto y la fecha actual * Hecho con Calendar * * @param inicio * @return */ public static int calcularAniosCalendar(Calendar inicio) { // Dia actual Calendar actual = Calendar.getInstance(); // Calcula la diferencia de años int diferencia = actual.get(Calendar.YEAR) - inicio.get(Calendar.YEAR); // Si la diferencia de años es 0, no hay que restar nada // Si el año del dia de la fecha que yo paso es mayor que la actual, resto uno if (diferencia != 0 && inicio.get(Calendar.DAY_OF_YEAR) > actual.get(Calendar.DAY_OF_YEAR)) { diferencia--; } return diferencia; } }
- Pasando 2 parámetros Calendar: calculamos la diferencia de años entre dos calendar. Veamos un ejemplo aplicado:
import java.util.Calendar; public class EjemploDiferenciaAnios { public static void main(String[] args) { Calendar c1 = Calendar.getInstance(); c1.set(Calendar.DATE, 31); c1.set(Calendar.MONTH, 11); c1.set(Calendar.YEAR, 2017); Calendar c2 = Calendar.getInstance(); c2.set(Calendar.DATE, 2); c2.set(Calendar.MONTH, 11); c2.set(Calendar.YEAR, 2021); int diferencia = calcularAniosCalendar(c1, c2); System.out.println("Diferencia de " + diferencia + " años"); } /** * Indica la diferencia de años entre dos Calendar. * * @param inicio fecha inicial * @param fin fecha final * @return */ public static int calcularAniosCalendar(Calendar inicio, Calendar fin) { // Calcula la diferencia de años int diferencia = fin.get(Calendar.YEAR) - inicio.get(Calendar.YEAR); // Si la diferencia de años es 0, no hay que restar nada // Si el año del dia de la fecha que yo paso es mayor que la actual, resto uno if (diferencia != 0 && inicio.get(Calendar.DAY_OF_YEAR) > fin.get(Calendar.DAY_OF_YEAR)) { diferencia--; } return diferencia; } }
En todos los casos el resultado es el siguiente:

También os dejo un vídeo:
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta