首頁 > 後端開發 > C++ > 如何獲得任何給定日期的正確 ISO-8601 週數?

如何獲得任何給定日期的正確 ISO-8601 週數?

DDD
發布: 2025-01-25 12:16:10
原創
581 人瀏覽過

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);
}
登入後複製

原理說明:

此函數會在日期落在星期一、星期二或星期三時調整日期,確保它與即將到來的星期四、星期五或星期六代表同一周。這種方法符合 ISO-8601 標準,該標準將第 1 周定義為包含星期四的第一周。

示例:

對於挑戰中提到的 2012 年 12 月 31 日,此函數返回 1,這根據 ISO-8601 標準是正確的周數。

以上是如何獲得任何給定日期的正確 ISO-8601 週數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板