ホームページ >バックエンド開発 >C++ >特定の日付の正しい ISO-8601 週番号を取得するにはどうすればよいですか?

特定の日付の正しい ISO-8601 週番号を取得するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-25 12:16:10570ブラウズ

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標準に応じてこれは間違っています。この違いは、ISO-8601はそうではありませんが、.NET許可週間に年間に及ぶことから派生しています。 解決策:

正しいISO-8601週を取得するには、次の機能を使用してください。

原則の説明:

この機能は、月曜日、火曜日、または水曜日の日付を調整して、次の木曜日、金曜日、または土曜日と同じ週を表すことを確認します。この方法は、ISO-8601規格を満たしています。これは、最初の週を木曜日の最初の週として定義します。

例:
<code class="language-csharp">// 假设周从星期一开始。
// 第 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);
}</code>

2012年12月31日、これはチャレンジで言及されていましたが、この関数は1を返しました。これはISO-8601規格に従って正しい週です。

以上が特定の日付の正しい ISO-8601 週番号を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。