Maison >développement back-end >C++ >Comment calculer le premier jour d'une semaine en fonction de l'année et du numéro de semaine à l'aide de la norme ISO 8601 ?

Comment calculer le premier jour d'une semaine en fonction de l'année et du numéro de semaine à l'aide de la norme ISO 8601 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-14 12:58:48204parcourir

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

Calcul précis de la date basé sur la norme ISO 8601

Trouver le premier jour d'une semaine spécifique en fonction de l'année et du numéro de la semaine peut paraître simple, mais devient compliqué si vous utilisez la norme ISO 8601, qui stipule que le premier jour de la semaine est le lundi en Europe, mais dans la norme C'est jeudi.

Afin de calculer la date avec précision, nous déterminons d'abord le premier jeudi de l'année. Cela garantit que nous sommes toujours dans la bonne année, que la première semaine de l'année s'étende ou non sur deux années civiles.

Si la première semaine de l'année est la semaine 1, soustrayez 1 du numéro de semaine donné pour tenir compte de la différence entre les dates de début.

Enfin, nous multiplions le numéro de la semaine par 7 jours et l'ajoutons au premier jeudi pour obtenir le premier jour de la semaine spécifiée. Cependant, pour respecter la définition ISO 8601, on soustraira 3 jours au jeudi obtenu pour obtenir le lundi, qui est le premier jour de la norme.

Ce qui suit est un exemple d'implémentation des conventions ISO 8601 dans du code C# :

<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>

En utilisant cette méthode, vous pouvez calculer avec précision le premier jour de la semaine en fonction de l'année et du numéro de la semaine, garantissant ainsi la conformité aux normes ISO 8601.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn