estoy trabajando en un proyecto donde el requisito es tener una fecha calculada como siendo el último viernes de un mes determinado. Creo que tengo una solución que solo usa Java estándar, pero me preguntaba si alguien sabía algo más conciso o eficiente. A continuación se muestra lo probé por este año:últimos viernes de mes en Java
for (int month = 0; month < 13; month++) {
GregorianCalendar d = new GregorianCalendar();
d.set(d.MONTH, month);
System.out.println("Last Week of Month in " + d.getDisplayName(d.MONTH, Calendar.LONG, Locale.ENGLISH) + ": " + d.getLeastMaximum(d.WEEK_OF_MONTH));
d.set(d.DAY_OF_WEEK, d.FRIDAY);
d.set(d.WEEK_OF_MONTH, d.getActualMaximum(d.WEEK_OF_MONTH));
while (d.get(d.MONTH) > month || d.get(d.MONTH) < month) {
d.add(d.WEEK_OF_MONTH, -1);
}
Date dt = d.getTime();
System.out.println("Last Friday of Last Week in " + d.getDisplayName(d.MONTH, Calendar.LONG, Locale.ENGLISH) + ": " + dt.toString());
}
Gran respuesta, pero ¿por qué utilizar el GregorianCalendar hormigón en lugar del Calendario abstracto devuelto por Calendar.getInstance()? –
gran respuesta. parece ser el más corto y el más conciso. Me gustaría modificarlo de nuevo si pudiera. – Randyaa
cal.get (Calendar.DAY_OF_WEEK)% 7 + 1; El% 7 + 1 es completamente innecesario aquí. cal.get (Calendar.DAY_OF_WEEK) devolverá un valor de 1 a 7 aquí ya (domingo es 1, sábado es 7).Modificar por 7 y luego agregar 1 literalmente no hace nada. –