Hola a todos, hoy os voy a explicar como podemos obtener el día inicial y final de un mes en Java.
Obtener el día inicial y final de un mes nos puede venir bien para mostrar filtros de fecha inicialmente, por ejemplo.
Para el día inicial, es fácil, realmente siempre es el día 1.
public static Date inicioMes() { Date d = new Date(); return new Date(d.getYear(), d.getMonth(), 1); }
Para el día final, depende del numero de días del mes y del año en el caso de Febrero, por si es bisiesto o no. Tenemos ya un tutorial donde hablamos de esto:
Así nos quedaría:
public static Date finMes() { Date d = new Date(); int dias = numeroDeDiasMes(d.getMonth() + 1); return new Date(d.getYear(), d.getMonth(), dias); } /** * 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; }
Veamos un ejemplo completo:
import java.util.Date; import java.util.GregorianCalendar; public class Principal { public static void main(String[] args) { System.out.println("Dia inicial"); System.out.println(inicioMes()); System.out.println("Dia final"); System.out.println(finMes()); } public static Date inicioMes() { Date d = new Date(); return new Date(d.getYear(), d.getMonth(), 1); } public static Date finMes() { Date d = new Date(); int dias = numeroDeDiasMes(d.getMonth() + 1); return new Date(d.getYear(), d.getMonth(), dias); } /** * 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; } }
Este es el resultado:
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta