Heim > Backend-Entwicklung > C++ > Wie berechnet man den ersten Tag einer Woche anhand von Jahr und Wochennummer nach ISO 8601?

Wie berechnet man den ersten Tag einer Woche anhand von Jahr und Wochennummer nach ISO 8601?

Mary-Kate Olsen
Freigeben: 2025-01-14 12:58:48
Original
202 Leute haben es durchsucht

How to Calculate the First Day of a Week Given Year and Week Number Using ISO 8601?

Genaue Datumsberechnung basierend auf ISO 8601-Standard

Den ersten Tag einer bestimmten Woche anhand des Jahres und der Wochennummer zu ermitteln, mag einfach erscheinen, wird jedoch kompliziert, wenn Sie den ISO 8601-Standard verwenden, der besagt, dass der erste Tag der Woche in Europa der Montag ist, aber im Standard Es ist Donnerstag.

Um das Datum genau zu berechnen, ermitteln wir zunächst den ersten Donnerstag im Jahr. Dadurch wird sichergestellt, dass wir uns immer im richtigen Jahr befinden, unabhängig davon, ob die erste Woche des Jahres zwei Kalenderjahre umfasst.

Wenn die erste Woche des Jahres Woche 1 ist, subtrahieren Sie 1 von der angegebenen Wochennummer, um den Unterschied in den Startdaten zu berücksichtigen.

Zuletzt multiplizieren wir die Wochennummer mit 7 Tagen und addieren sie zum ersten Donnerstag, um den ersten Tag der angegebenen Woche zu erhalten. Um jedoch der ISO 8601-Definition zu entsprechen, subtrahieren wir 3 Tage vom resultierenden Donnerstag, um Montag zu erhalten, der der erste Tag in der Norm ist.

Das Folgende ist ein Beispiel für die Implementierung von ISO 8601-Konventionen in C#-Code:

<code class="language-csharp">public static DateTime FirstDateOfWeekISO8601(int year, int weekOfYear)
{
    DateTime jan1 = new DateTime(year, 1, 1);
    int daysOffset = DayOfWeek.Thursday - jan1.DayOfWeek;

    // 使用一月份的第一个星期四获取一年的第一周
    DateTime firstThursday = jan1.AddDays(daysOffset);
    var cal = CultureInfo.CurrentCulture.Calendar;
    int firstWeek = cal.GetWeekOfYear(firstThursday, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

    var weekNum = weekOfYear;
    // 由于我们正在向第 1 周的日期添加天数,
    // 因此我们需要减去 1 才能获得第 1 周的正确日期
    if (firstWeek == 1)
    {
        weekNum -= 1;
    }

    // 使用第一个星期四作为起始周确保我们从正确的年份开始
    // 然后我们将周数乘以天数的结果相加
    var result = firstThursday.AddDays(weekNum * 7);

    // 从星期四减去 3 天以获得星期一,这是 ISO8601 中的第一天
    return result.AddDays(-3);
}</code>
Nach dem Login kopieren

Mit dieser Methode können Sie den ersten Tag der Woche anhand des Jahres und der Wochennummer genau berechnen und so die Einhaltung der ISO 8601-Standards sicherstellen.

Das obige ist der detaillierte Inhalt vonWie berechnet man den ersten Tag einer Woche anhand von Jahr und Wochennummer nach ISO 8601?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage