0

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

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

2005 年 1 月 1 日2008 年 12 月 28 日

问题是,我的 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

对于CalendarWeekRuleand FirstDayOfWeek,我使用的是 en-US 文化的默认选项。

4

1 回答 1

0

可从此处获得该问题的描述

我对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);
    }
于 2013-01-21T10:16:38.950 回答