Tengo un número de la semana en base ISO que se calcula utilizando la siguiente API de Java 8 LocalDate
int weekNumOfYear = LocalDate#get(IsoFields.WEEK_OF_WEEK_BASED_YEAR)
Teniendo en cuenta el año, y el número de la semana (por ejemplo, 201927), ¿Cómo podría calcular el día de inicio y fecha final de esta semana (201917)?
Estoy utilizando Calendar
la clase para este problema, pero no está seguro de que es correcta (en especial, si es ha seguido el formato ISO)
Actualización: El código siguiente no funciona correctamente para 201953, no hay semana 53ª de 2019
@Test
public void testGetWeekDays() {
Integer year = 2019;
Integer week = 27;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
//Use ISO format
cal.setMinimalDaysInFirstWeek(4);
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.set(Calendar.YEAR, year);
cal.set(Calendar.WEEK_OF_YEAR, week);
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
String beginDate = sdf.format(cal.getTime());
cal.add(Calendar.DAY_OF_WEEK, 6);
String endDate = sdf.format(cal.getTime());
System.out.println(beginDate);
System.out.println(endDate);
}
También se puede utilizar with
para obtener los días de inicio y final día de la semana
System.out.println(localDate.with(DayOfWeek.MONDAY));
System.out.println(localDate.with(DayOfWeek.SUNDAY));
Si desea obtener día de inicio y el día final del número de la semana, a continuación, utilizar ISO_WEEK_DATE
LocalDate startDay = LocalDate.parse("2019-W26-1", DateTimeFormatter.ISO_WEEK_DATE);
LocalDate endDay = LocalDate.parse("2019-W26-7", DateTimeFormatter.ISO_WEEK_DATE);
Un dígito para el día de la semana. El valor de ejecución de lunes (1) a domingo (7).