Valor referente à semana do Mês

Boa tarde , Devs.

Estou com uma pendencia e preciso da ajuda de vcs.
É o seguinte : Recebo do front dois valores referente ao mês e ano (08/2020), preciso retornar as semanas deste mês.
ex: Agosto
Semanas 31,32,33,34,35 e 36 - ano 2020
E preciso também pegar o inicio e fim de cada semana
ex: Agosto
Semana 31 - 01/08 - 02/08
Semana 32 - 03/08 - 09/08
Semana 33 - 10/08 - 16/08
Semana 34 - 17/08 - 23/08
Semana 35 - 24/08 - 30/08
Semana 36 - 31/08 - 31/08

Isso referente a data que o usuário informar.

Obrigado por enquanto.

Montei um código aqui:

private Set<Integer> recuperarDiasSemana(LocalDateTime value) {
	WeekFields weekFields = WeekFields.of(Locale.getDefault());
	LocalDateTime start = LocalDateTime.from(value).withDayOfMonth(1);
	LocalDateTime end = LocalDateTime.from(value).withDayOfMonth(30);
	Set<Integer> weekNumbers = new HashSet<>();
	
	while (start.isBefore(end) || start.isEqual(end)) {
		int weekNumber = start.get(weekFields.weekOfWeekBasedYear());
		weekNumbers.add(weekNumber);
		start = start.plusDays(1);
	}
	
	return weekNumbers;
}

Com certeza, ele pode ser melhorado.

1 curtida

@Lucas_Camara , obrigado pela ajuda e resposta ágil, testei aqui vou só precisar de fazer as adaptações quando for ano bissexto, que é o caso de 2020, porque daí ele tem 53 semanas e não 52. Sendo assim todos as semanas estão começando no mês anterior.

Aqui nesta parte do código
LocalDateTime end = LocalDateTime.from(value).withDayOfMonth(30);
vai estourar uma exception , porque fevereiro só vai até 29.

Resolvi pegando a quantidade de dias de cada mês
LocalDate date = LocalDate.of(value.getYear(), value.getMonth(), 01);
int numberOfDays = date.lengthOfMonth();
LocalDateTime end = LocalDateTime.from(value).withDayOfMonth(numberOfDays );