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.
|
1 2 3 4 5 6 7 |
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:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
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:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
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