>백엔드 개발 >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 표준을 사용하면 복잡해집니다. 목요일이에요.

날짜를 정확하게 계산하기 위해 먼저 연중 첫 번째 목요일을 결정합니다. 이렇게 하면 해당 연도의 첫 번째 주가 2년에 걸쳐 있는지 여부에 관계없이 항상 올바른 연도에 있게 됩니다.

연도의 첫 번째 주가 1주차인 경우 시작 날짜의 차이를 고려하여 주어진 주 번호에서 1을 뺍니다.

마지막으로 주 수에 7일을 곱하고 이를 첫 번째 목요일에 추가하여 지정된 주의 첫 번째 날을 구합니다. 그러나 ISO 8601 정의를 준수하기 위해 결과 목요일에서 3일을 빼서 표준의 첫 번째 날인 월요일을 얻습니다.

다음은 C# 코드에서 ISO 8601 규칙을 구현하는 예입니다.

<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.