.NET Core Tipp: Kalenderwochen nach ISO 8601

Problem

Im klassischen Framework war für die Berechnung der Kalenderwochen eine eigene Implementierung nötig, wenn diese gemäss der ISO 8601 – Regeln berechnet werden mussten. Diese sind zum Beispiel auf Wikipedia beschrieben.

Eine Implementierung zur Anwendung dieser Regeln konnte zum Beispiel wie folgt aussehen:

public static int GetIso8601WeekOfYear(DateTime time)
{
  DayOfWeek day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time);
  if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday)
  {
    time = time.AddDays(3);
  }

  return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
}
GetIso8601WeekOfYear(new DateTime(2020,3,23))

Aktion

Ab .NET Core 3.0 steht für solche Anwendungsfälle die Klasse ISOWeek im Namensraum System.Globalization zur Verfügung.

Die Ermittlung erfolgt mit der Methode GetWeekOfYear

ISOWeek.GetWeekOfYear(new DateTime(2020,3,23))

Resultat

Die Ermittlung der Kalenderwoche nach ISO 8601 ist ab .NET Core 3.0 (.NET Standard 2.1) Teil des Frameworks und erfordert den Aufruf der Methode anstatt der Implementierung eigener Regeln im Code.

Weitere Informationen sind dokumentiert unter ISO Week Class.