> 백엔드 개발 > C++ > 특정 날짜에 대해 올바른 ISO-8601 주 번호를 얻는 방법은 무엇입니까?

특정 날짜에 대해 올바른 ISO-8601 주 번호를 얻는 방법은 무엇입니까?

DDD
풀어 주다: 2025-01-25 12:16:10
원래의
573명이 탐색했습니다.

How to Get the Correct ISO-8601 Week Number for Any Given Date?

ISO-8601 표준에 따라 특정 날짜의 올바른 주 번호를 가져옵니다

도전:

특정 날짜의 정확한 주 수를 결정하는 것은 까다로울 수 있으며, 특히 연말 날짜를 처리할 때 더욱 그렇습니다. 기존 .NET 방법은 종종 ISO-8601 표준을 준수하지 못하고 일부 날짜에 잘못된 주 번호를 할당합니다.

잘못된 주 번호:

예를 들어 .NET 접근 방식은 2012년 12월 31일을 53주차로 표시할 수 있지만 이는 ISO-8601 표준에 따르면 올바르지 않습니다. 이러한 차이점은 .NET에서는 몇 주가 몇 년에 걸쳐 허용되는 반면 ISO-8601에서는 허용되지 않는다는 사실에서 비롯됩니다.

해결책:

올바른 ISO-8601 주 번호를 얻으려면 다음 기능을 사용하세요.

// 假设周从星期一开始。
// 第 1 周是当年包含星期四的第一周。
public static int GetIso8601WeekOfYear(DateTime time)
{
    DayOfWeek day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time);
    if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday)
    {
        time = time.AddDays(3 - (int)day);
    }
    else if (day > DayOfWeek.Wednesday)
    {
        time = time.AddDays(10 - (int)day);
    }
    return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
}
로그인 후 복사

원리 설명:

이 기능은 날짜가 월요일, 화요일 또는 수요일에 해당하는 경우 날짜를 조정하여 다가오는 목요일, 금요일 또는 토요일과 동일한 주를 나타내도록 합니다. 이 방법은 1주차를 목요일이 포함된 첫 번째 주로 정의하는 ISO-8601 표준을 준수합니다.

예:

챌린지에서 언급된 2012년 12월 31일 날짜에 대해 이 함수는 ISO-8601 표준에 따른 올바른 주 번호인 1을 반환합니다.

위 내용은 특정 날짜에 대해 올바른 ISO-8601 주 번호를 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿