utilizar usar pedir obtener manejo fechas fecha como calendario atributo and actual java date-manipulation

java - usar - Fecha de inicio y final de un mes actual



obtener fecha actual java (9)

Ahí tienes:

public Pair<Date, Date> getDateRange() { Date begining, end; { Calendar calendar = getCalendarForNow(); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH)); setTimeToBeginningOfDay(calendar); begining = calendar.getTime(); } { Calendar calendar = getCalendarForNow(); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); setTimeToEndofDay(calendar); end = calendar.getTime(); } return Pair.of(begining, end); } private static Calendar getCalendarForNow() { Calendar calendar = GregorianCalendar.getInstance(); calendar.setTime(new Date()); return calendar; } private static void setTimeToBeginningOfDay(Calendar calendar) { calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); } private static void setTimeToEndofDay(Calendar calendar) { calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); calendar.set(Calendar.MILLISECOND, 999); }

PD: la clase de Pair es simplemente un par de dos valores.

Necesito la fecha de inicio y la fecha de finalización del mes actual en Java. Cuando la página JSP se carga con el mes actual, debe calcular automáticamente la fecha de inicio y finalización de ese mes. Debe ser independientemente del año y mes. Eso es un mes tiene 31 días o 30 días o 28 días. Esto también debería satisfacerse para un año bisiesto. ¿Puedes ayudarme con eso?

Por ejemplo, si selecciono el mes de mayo en un cuadro de lista, necesito una fecha de inicio que sea 1 y una fecha de finalización que sea 31.


Con la biblioteca date4j :

dt.getStartOfMonth(); dt.getEndOfMonth();


Haciéndolo más modular, puede tener una función principal que calcule startDate o EndDate y que pueda tener métodos individuales para getMonthStartDate , getMonthEndDate y getMonthStartEndDate . Use métodos según su requisito.

public static String getMonthStartEndDate(){ String start = getMonthDate("START"); String end = getMonthDate("END"); String result = start + " to " + end; return result; } public static String getMonthStartDate(){ String start = getMonthDate("START"); return start; } public static String getMonthEndDate(){ String end = getMonthDate("END"); return end; } /** * @param filter * START for start date of month e.g. Nov 01, 2013 * END for end date of month e.g. Nov 30, 2013 * @return */ public static String getMonthDate(String filter){ String MMM_DD_COMMA_YYYY = "MMM dd, yyyy"; SimpleDateFormat sdf = new SimpleDateFormat(MMM_DD_COMMA_YYYY); sdf.setTimeZone(TimeZone.getTimeZone("PST")); sdf.format(GregorianCalendar.getInstance().getTime()); Calendar cal = GregorianCalendar.getInstance(); int date = cal.getActualMinimum(Calendar.DATE); if("END".equalsIgnoreCase(filter)){ date = cal.getActualMaximum(Calendar.DATE); } cal.set(Calendar.DATE, date); String result = sdf.format(cal.getTime()); System.out.println(" " + result ); return result; }


Para Java 8+, el método siguiente dará las fechas del primer y último mes actual como instancias de LocalDate.

public static LocalDate getCurrentMonthFirstDate() { return LocalDate.ofEpochDay(System.currentTimeMillis() / (24 * 60 * 60 * 1000) ).withDayOfMonth(1); } public static LocalDate getCurrentMonthLastDate() { return LocalDate.ofEpochDay(System.currentTimeMillis() / (24 * 60 * 60 * 1000) ).plusMonths(1).withDayOfMonth(1).minusDays(1); }

Nota al LocalDate.ofEpochDay(...) : el uso de LocalDate.ofEpochDay(...) lugar de LocalDate.now() ofrece un rendimiento mucho mejor. Además, al usar la expresión millis-in-a-day en lugar del valor final, que es 86400000 tiene un mejor rendimiento. Inicialmente pensé que este último funcionaría mejor que la expresión: P


Prueba este código

Calendar calendar = Calendar.getInstance(); int yearpart = 2010; int monthPart = 11; int dateDay = 1; calendar.set(yearpart, monthPart, dateDay); int numOfDaysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println("Number of Days: " + numOfDaysInMonth); System.out.println("First Day of month: " + calendar.getTime()); calendar.add(Calendar.DAY_OF_MONTH, numOfDaysInMonth-1); System.out.println("Last Day of month: " + calendar.getTime());

Espero eso ayude.


Pruebe LocalDate desde Java 8:

LocalDate today = LocalDate.now(); System.out.println("First day: " + today.withDayOfMonth(1)); System.out.println("Last day: " + today.withDayOfMonth(today.lengthOfMonth()));


Si tiene la opción, será mejor que evite la horrible API de Java Date, y use en su lugar Jodatime . Aquí hay un ejemplo:

LocalDate monthBegin = new LocalDate().withDayOfMonth(1); LocalDate monthEnd = new LocalDate().plusMonths(1).withDayOfMonth(1).minusDays(1);


Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = 1; c.set(year, month, day); int numOfDaysInMonth = c.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println("First Day of month: " + c.getTime()); c.add(Calendar.DAY_OF_MONTH, numOfDaysInMonth-1); System.out.println("Last Day of month: " + c.getTime());


Date begining, ending; Calendar calendar_start =BusinessUnitUtility.getCalendarForNow(); calendar_start.set(Calendar.DAY_OF_MONTH,calendar_start.getActualMinimum(Calendar.DAY_OF_MONTH)); begining = calendar_start.getTime(); String start= DateDifference.dateToString(begining,"dd-MMM-yyyy");//sdf.format(begining); // for End Date of month Calendar calendar_end = BusinessUnitUtility.getCalendarForNow(); calendar_end.set(Calendar.DAY_OF_MONTH,calendar_end.getActualMaximum(Calendar.DAY_OF_MONTH)); ending = calendar_end.getTime(); String end=DateDifference.dateToString(ending,"dd-MMM-yyyy");//or sdf.format(end); enter code here public static Calendar getCalendarForNow() { Calendar calendar = GregorianCalendar.getInstance(); calendar.setTime(new Date()); return calendar; }