.NET Calendar.GetWeekOfYear为en-US返回错误的结果

时间:2013-01-09 17:26:52

标签: c# .net datetime calendar cultureinfo

我搜索了一个类似的帖子,但似乎没有人回答这个问题。

对于 01/01/2005 12/28/2008 的日期,根据 timeanddate.com ,周数应为1 em>网站,假设它是正确的:

01/01/200512/28/2008

问题是,我生成的C#代码为 01/01/2005 生成了正确的周数结果,但 12/28/2008 的结果不正确,返回53,而不是1:

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

对于CalendarWeekRuleFirstDayOfWeek,我使用的是美国文化的默认选项。

1 个答案:

答案 0 :(得分:0)

可从here

获取有关该问题的说明

我对CalendarWeekRule.FirstFourDayWeek规则使用以下方法 - 它会检查星期四周数是多少(使用相同的.NET方法),因为星期四是使用它时真正重要的一天规则和微软的代码一直都是正确的:)

    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);
    }