Comment obtenir une liste de toutes les dates de la semaine pour la semaine civile donnée en Java pur 8?


Il y a beaucoup exemples de la façon dont des choses similaires peuvent être faites en utilisant Joda-Timeet old java.util.Calendrier/java.util.Date API, mais il n'y a pas d'exemples complets de la façon dont il peut être réalisé en utilisant pure java.API time , sans dépendances supplémentaires.

Il existe aussi de nombreux exemples, comment générer des dates pour les deux dates. Mais je n'ai pas pu trouver un exemple complet de la façon de générer des dates de semaine pour une donnée numéro de l'année et de la semaine civile.

Pourriez-vous fournir un exemple de cela en Java pur 8/java.temps API?

Author: Community, 2015-08-24

1 answers

Pur Java 8 / java.solution temporelle

public static List<LocalDate> datesListOfCalendarWeek(int year, long calendarWeek) {
    LocalDate start = LocalDate.ofYearDay(year,1)
            .with(IsoFields.WEEK_OF_WEEK_BASED_YEAR, calendarWeek)
            .with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));

    return IntStream.range(0, 7).mapToObj(start::plusDays).collect(toList());
}

Comparez avec la solution Joda-Time:

public static List<org.joda.time.LocalDate> datesListOfCalendarWeek(int year, int calendarWeek) {
    org.joda.time.LocalDate start = new org.joda.time.LocalDate(year,1,1)
            .withWeekOfWeekyear(calendarWeek).withDayOfWeek(1);
    return IntStream.range(0, 7).mapToObj(start::plusDays).collect(toList());
}

Et évidemment, pour tout LocalDate donné, les solutions se présentent comme suit:

/* Pure Java 8 / java.time */
public static List<LocalDate> datesListOfCalendarWeek(LocalDate date) {
    LocalDate start = date.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
    return IntStream.range(0, 7).mapToObj(start::plusDays).collect(toList());
}

/* Joda-Time */
public static List<org.joda.time.LocalDate> datesListOfCalendarWeek(org.joda.time.LocalDate date) {
    org.joda.time.LocalDate start = date.withDayOfWeek(1);
    return IntStream.range(0, 7).mapToObj(start::plusDays).collect(toList());
}
 3
Author: Mateusz Szulc, 2015-08-24 16:50:32