0

同様の投稿を検索しましたが、この質問に答えるものはないようです。

timeanddate.com Web サイトによると、2005 年 1 月 1 日と 2008 年 12 月 28 日の日付の場合、正しいと仮定すると、番号1 になります。

2005 年 1 月 1 日および2008 年 12 月 28 日

問題は、私が持っている C# コードが01/01/2005の正しい週番号の結果を生成しますが、 12/28/2008の間違った結果を生成し、1 ではなく 53 を返すことです:

CultureInfo clUS = new CultureInfo( "en-US", false );

int wkNm = clUS.Calendar.GetWeekOfYear(
  new DateTime( 2005, 1, 1, clUS.Calendar ),
  clUS.DateTimeFormat.CalendarWeekRule,
  clUS.DateTimeFormat.FirstDayOfWeek
);  // returns 1

wkNm = clUS.Calendar.GetWeekOfYear(
  new DateTime( 2008, 12, 28, clUS.Calendar ),
  clUS.DateTimeFormat.CalendarWeekRule,
  clUS.DateTimeFormat.FirstDayOfWeek
);  // returns 53

CalendarWeekRuleとについてFirstDayOfWeekは、en-US カルチャの既定のオプションを使用しています。

4

1 に答える 1

0

問題の説明はここから入手できます

私はルールに以下のメソッドを使用します-木曜日のCalendarWeekRule.FirstFourDayWeek週番号が (同じ .NET メソッドを使用して)チェックされます。なぜなら、木曜日はそのルールを使用するときに実際に重要な日であり、Microsoft のコードは常にそれを正しく取得するからです :)

    private static int WeekNumber(DateTime date)
    {
        var dayOffset = DayOfWeek.Thursday - date.DayOfWeek;
        if (dayOffset > 0)
            date = date.AddDays(dayOffset);

        return CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
    }
于 2013-01-21T10:16:38.950 に答える