System.Globalization.Calendar.GetWeekOfYear()返回奇数结果

ssh*_*how 13 .net c# calendar week-number

我正在计算日期的周数,但是在System.Globalization.Calendar2007年和2012年的12月31日(其他年份)中,它将返回奇数结果.

Calendar calendar = CultureInfo.InvariantCulture.Calendar;
var date = new DateTime(2007, 12, 29);
for (int i = 0; i < 5; i++)
{
    int w = calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
    Console.WriteLine("{0}\t{1}", date.ToString("dd.MM.yyyy"), w);
    date = date.AddDays(1);
}
Run Code Online (Sandbox Code Playgroud)

结果

29.12.2007      52
30.12.2007      52
31.12.2007      53 <--
01.01.2008       1
02.01.2008       1

29.12.2012      52
30.12.2012      52
31.12.2012      53 <--
01.01.2013       1
02.01.2013       1
Run Code Online (Sandbox Code Playgroud)

据我了解,2007年和2012年不应该有53周,但是应该在第1周包括这些日子.有没有办法改变这种行为Calendar

pho*_*oog 13

CalendarWeekRule枚举文档明确指出它"不直接映射到ISO 8601",并链接到Microsoft .Net中的ISO 8601 Week of Year格式,这是描述差异的博客条目.

  • 我甚至不想看看解决方法.我的简单问题是:为什么?谁从中受益?为什么*稍微*改变,以便您必须选择十个中的两个日期以查看差异?有点沮丧...... (9认同)