ホームページ >バックエンド開発 >C++ >ISO 8601 を使用して年と週番号を指定して週の最初の日を計算するにはどうすればよいですか?

ISO 8601 を使用して年と週番号を指定して週の最初の日を計算するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-14 12:58:48202ブラウズ

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

ISO 8601 標準に基づいた正確な日付計算

年と週番号に基づいて特定の週の最初の日を見つけることは簡単に思えるかもしれませんが、ISO 8601 標準を使用すると複雑になります。ISO 8601 標準では、ヨーロッパでは週の最初の日は月曜日であると規定されていますが、標準では木曜日です。

日付を正確に計算するために、まず年の最初の木曜日を決定します。これにより、年の最初の週が 2 暦年にまたがるかどうかに関係なく、常に正しい年になることが保証されます。

年の最初の週が第 1 週の場合、開始日の違いを考慮して、指定された週番号から 1 を減算します。

最後に、週番号に 7 日を掛け、それを最初の木曜日に加算して、指定した週の最初の日を取得します。ただし、ISO 8601 の定義に準拠するために、結果の木曜日から 3 日を引いて、標準の最初の日である月曜日を取得します。

次に、ISO 8601 規則を 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>

この方法を使用すると、年と週番号に基づいて週の最初の日を正確に計算でき、ISO 8601 標準への準拠が保証されます。

以上がISO 8601 を使用して年と週番号を指定して週の最初の日を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。