基於 ISO 8601 標準精確計算日期
根據年份和週數找到特定一周的第一天看似簡單,但如果使用ISO 8601 標準,則會變得複雜,因為該標準規定一周的第一天在歐洲是星期一,但在標準中是星期四。
為了精確計算日期,我們先決定一年的第一個星期四。這確保我們始終處於正確的年份,無論一年的第一周是否跨越兩個日曆年。
如果一年的第一週是第 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中文網其他相關文章!