私は日付の週番号を計算中ですが、System.Globalization.Calendar
は(他の年の間に)2007年と2012年の12月31日に奇妙な結果を返しています。System.Globalization.Calendar.GetWeekOfYear()は奇妙な結果を返します
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);
}
結果
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
私の知る限り理解し、そこに2007年と2012年に週53ではないはずですが、日が週1に含まれるべき方法はあります0123でこの動作を変更する?
「1日目には日数が含まれているはずです」:どのルールに従っていますか?私が知っているルールによると、今年の最後の日は決して翌年の最初の週の一部ではありません... –
ISO 8601に従ってhttp://en.wikipedia.org/wiki/ISO_8601 – sshow
ところで、なぜその奇妙な日付形式を使用していますか?私は '2007.12.29'と書かれた日付は見たことがないと思う。 – svick