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