Como calcular si un año es bisiesto en Java

Hola a todos, hoy os voy a explicar como podemos calcular si un año es bisiesto en Java.

Un problema clásico es Java es averiguar si un año en concreto es bisiesto, que un año sea bisiesto, significa que tiene un día mas (29 de febrero).

Pero, ¿cuales son las condiciones para que un año sea bisiesto? Estas son:

  • Es divisible entre 4 y no es divisible entre 100.
  • Es divisible entre 100 y 400.

 

Si se cumple, cualquiera de estas dos condiciones, el año sera bisiesto. Sino se cumplen ninguna de ellas, el año no será bisiesto.

Por lo tanto, como se cumple una de las condiciones. El año 2000:

  • Es divisible entre 4 y no es divisible entre 100. Falso, es divisible entre 100.
  • Es divisible entre 100 y 400. Verdadero, es divisible entre 100 y 400.

Por lo tanto, el año 2000 es bisiesto.

Pongamos otro ejemplo, el año 2020:

  • Es divisible entre 4 y no es divisible entre 100. Verdadero, es divisible entre 4 y no lo es entre 100.
  • Es divisible entre 100 y 400. Falso, no es divisible entre 100 ni de 400.

Por lo tanto, como se cumple una de las condiciones. El año 2020 es bisiesto.

Pongamos otro ejemplo, el año 1900:

  • Es divisible entre 4 y no es divisible entre 100. Falso, es divisible entre 4 pero también de 100.
  • Es divisible entre 100 y 400. Falso, es divisible entre 100 pero no de 400.

Por lo tanto, como se cumple una de las condiciones. El año 1900 es bisiesto.

Os dejo por aquí el código de como se resolvería en Java:


import java.util.Scanner;

public class Ejemplo_bisiesto_1 {

    public static void main(String[] args) {

        Scanner sn = new Scanner(System.in);

        // Pido el año
        System.out.println("Introduce un año");
        int anio = sn.nextInt();

        //Si es divisible entre 4 y no es divisible entre 100 o es divisible entre 100 y 400.
        if ((anio % 4 == 0 && anio % 100 != 0) || (anio % 100 == 0 && anio % 400 == 0)) {
            System.out.println("El año " + anio + " es bisiesto");
        } else {
            System.out.println("El año " + anio + " no es bisiesto");
        }

    }

}


 

También os dejo otra alternativa de código:


import java.util.GregorianCalendar;
import java.util.Scanner;

public class Ejemplo_bisiesto_2 {

    public static void main(String[] args) {

        Scanner sn = new Scanner(System.in);

        // Pido el año
        System.out.println("Introduce un año");
        int anio = sn.nextInt();

        // Creo un calendario gregoriano
        GregorianCalendar calendar = new GregorianCalendar();

        // isLeapYear indica si el año es o no bisiesto
        if (calendar.isLeapYear(anio)) {
            System.out.println("El año " + anio + " es bisiesto");
        } else {
            System.out.println("El año " + anio + " no es bisiesto");
        }

    }

}


También os lo dejo en forma de función para que lo podáis automatizar:


/**
 * Indica si un año es bisiesto o no
 *
 * @param anio Año
 * @return True = es bisiesto
 */
public static boolean esBisiestoGregorian(int anio) {

    GregorianCalendar calendar = new GregorianCalendar();
    boolean esBisiesto = false;
    if (calendar.isLeapYear(anio)) {
        esBisiesto = true;
    }
    return esBisiesto;

}

/**
 * Indica si un año es bisiesto o no
 *
 * @param anio Año
 * @return True = es bisiesto
 */
public static boolean esBisiesto(int anio) {

    return (anio % 4 == 0 && anio % 100 != 0) || (anio % 100 == 0 && anio % 400 == 0);
}

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Etiquetas

Deja un comentario

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