Obtener los números de días de un mes en Java

Hola a todos, hoy os voy explicar como podemos obtener los números de días de un mes en Java.

En algún momento, podemos necesitar saber cuantos días tiene un mes.

Los meses que tienen 30 días son:

  • Abril
  • Junio
  • Septiembre
  • Noviembre

Los meses que tienen 31 días son:

  • Enero
  • Marzo
  • Mayo
  • Julio
  • Agosto
  • Octubre
  • Diciembre

En Febrero si el año es bisiesto, tendrá 29 días, sino tendrá 28 días.

Para ello, os recomiendo tener esta función a mano:

https://www.discoduroderoer.es/como-calcular-si-un-ano-es-bisiesto-en-java

 

De todas formas, os lo dejo en cada función.

En todas las funciones, devolverá un -1 cuando el mes no este entre 1 y 12 o no sea un mes correcto.

Os dejo las funciones que podéis copiar para vuestro proyectos.


/**
 * Devuelve el número de dias del mes (número) pasado por parámetro
 * Si es Febrero tiene en cuenta si este año es bisiesto o no
 * Empieza por 1
 * @param mes Mes que queremos saber el número de días
 * @return Número de días de ese mes
 */
public static int numeroDeDiasMes(int mes){

    int numeroDias=-1;

        switch(mes){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                numeroDias=31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                numeroDias=30;
                break;
            case 2:

                Date anioActual=new Date();
                if(esBisiesto(1900 + anioActual.getYear())){
                    numeroDias=29;
                }else{
                    numeroDias=28;
                }
                break;

        }

    return numeroDias;
}

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

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

}

En esta función, igual pero pasandole un String como parámetro:

 


/**
 * Devuelve el número de dias del mes pasado por parámetro Si es Febrero
 * tiene en cuenta el año pasado es bisiesto o no
 *
 * @param mes Mes que queremos saber el número de días
 * @param anio Año, usado para casos de años bisiestos
 * @return Número de días de ese mes
 */
public static int numeroDeDiasMes(String mes, int anio) {

    int numeroDias = -1;
    switch (mes.toLowerCase().trim()) {
        case "enero":
        case "marzo":
        case "mayo":
        case "julio":
        case "agosto":
        case "octubre":
        case "diciembre":
            numeroDias = 31;
            break;
        case "abril":
        case "junio":
        case "septiembre":
        case "noviembre":
            numeroDias = 30;
            break;
        case "febrero":

            if (esBisiesto(anio)) {
                numeroDias = 29;
            } else {
                numeroDias = 28;
            }
            break;

    }

    return numeroDias;
}

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

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

}


Os dejo otra más donde le pasamos el año si así lo deseamos:


/**
 * Devuelve el número de dias del mes pasado por parámetro Si es Febrero
 * tiene en cuenta el año pasado es bisiesto o no
 *
 * @param mes Mes que queremos saber el número de días
 * @param anio Año, usado para casos de años bisiestos
 * @return Número de días de ese mes
 */
public static int numeroDeDiasMes(String mes, int anio) {

    int numeroDias = -1;
    switch (mes.toLowerCase().trim()) {
        case "enero":
        case "marzo":
        case "mayo":
        case "julio":
        case "agosto":
        case "octubre":
        case "diciembre":
            numeroDias = 31;
            break;
        case "abril":
        case "junio":
        case "septiembre":
        case "noviembre":
            numeroDias = 30;
            break;
        case "febrero":

            if (esBisiesto(anio)) {
                numeroDias = 29;
            } else {
                numeroDias = 28;
            }
            break;

    }

    return numeroDias;
}

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

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

}

Misma función pero con String como parámetro:


/**
 * Devuelve el número de dias del mes pasado por parámetro Si es Febrero
 * tiene en cuenta el año pasado es bisiesto o no
 *
 * @param mes Mes que queremos saber el número de días
 * @param anio Año, usado para casos de años bisiestos
 * @return Número de días de ese mes
 */
public static int numeroDeDiasMes(String mes, int anio) {

    int numeroDias = -1;
    switch (mes.toLowerCase().trim()) {
        case "enero":
        case "marzo":
        case "mayo":
        case "julio":
        case "agosto":
        case "octubre":
        case "diciembre":
            numeroDias = 31;
            break;
        case "abril":
        case "junio":
        case "septiembre":
        case "noviembre":
            numeroDias = 30;
            break;
        case "febrero":

            if (esBisiesto(anio)) {
                numeroDias = 29;
            } else {
                numeroDias = 28;
            }
            break;

    }

    return numeroDias;
}

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

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

}

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 *