Kalenderwoche berechnen mit Java

Vor allem im deutschsprachigen Raum ist die Verwendung der Kalenderwoche sehr weit verbreitet. Die Berechnung und Umwandlung erfolgt mit der Klasse LocalDate in Java 8 sowie mit Calendar in Java vor Version 8.

Die erste KW jedes Jahres ist jene, in der mehr als die Hälfte einer Woche enthalten ist. Zum Beispiel beginnt die erste Kalenderwoche 2016 erst am 4. Jänner. Der 3. Januar 2016 liegt in KW 53 im Jahr 2015.

Inhaltsverzeichnis

Kalenderwoche für Datum mit Java 8

Die Berechnung der KW für ein Datum geht mit Java 8 ganz einfach mit einem LocalDate Objekt:

LocalDate localDate = LocalDate.of(2016, Month.JANUARY, 3);
int weekNumber = localDate.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR);
System.out.println(weekNumber);
//Ausgabe: 53

Die Zeile localDate.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR) gibt die Kalenderwoche für das Datum zurück.

Doch Achtung: Das gilt nur für das bei uns im Deutschsprachigen Raum gültige Kalendersystem laut ISO-8601. Möchte man ein anderes System verwenden muss das Locale explizit angegeben werden:

LocalDate date= LocalDate.of(2016, Month.JANUARY, 3);
TemporalField woy = WeekFields.of(Locale.CANADA).weekOfWeekBasedYear();
System.out.println(date.get(woy));
// Ausgabe: 2

Es ist ja kein Geheimnis dass die Leute über dem großen Teich bei Einheiten ein wenig eigensind ;). In Kanada beginnt die Woche Mit einem Sonntag und die erste Woche ist jene, in der der erste Januar liegt. Daher ist Sonntag, der 3.1.2016 der erste Tag in der 2. Kalenderwoche.

Datum für Kalenderwoche mit Java 8

Das Datum für eine bestimmte Kalenderwoche wird berechnet, indem ein beliebiges Datum im Jahr erstellt wird und dann die Kalenderwoche gesetzt wird. um den ersten Tag der Woche zu ermitteln, wird DayOfWeek.MONDAY gesetzt.

int year = 2015;
int weekNumber = 53;
LocalDate date = LocalDate.of(year, Month.JANUARY, 10);
LocalDate dayInWeek = date.with(IsoFields.WEEK_OF_WEEK_BASED_YEAR, weekNumber);
LocalDate start = dayInWeek.with(DayOfWeek.MONDAY);
System.out.println(start);
// Ausgabe: 2015-12-28

Wie oben kann natürlich auch ein anderes Locale verwendet werden.

Kalenderwoche für Datum mit Java vor Version 8

Um für ein Date Objekt die Kalenderwoche zu ermitteln kann die folgende Methode verwendet werden:

public static int getWeekNumberFromDate(Date date) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    return cal.get(Calendar.WEEK_OF_YEAR);
}

Datum für Kalenderwoche mit Java vor Version 8

Die folgende Methode berechnet das Datum für eine Kalenderwoche in einem Jahr:

public static Date getDateFromWeekNumber(int year, int weekNumber) {
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.WEEK_OF_YEAR, weekNumber);
    cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    return cal.getTime();
}

Ähnliche Artikel