問題描述
我正在計算日期的周數,但 System.Globalization.Calendar
正在返回 2007 年 12 月 31 日和 2012 年 12 月 31 日的奇數結果.p>
I'm in the middle of calculating week numbers for dates, but the System.Globalization.Calendar
is returning odd results for (amongst other years) December 31st of year 2007 and 2012.
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} {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 周中.有沒有辦法在 Calendar
?
As far as I understand, there shouldn't be a week 53 in year 2007 and 2012, but the days should be included in week 1. Is there a way to change this behaviour in the Calendar
?
推薦答案
CalendarWeekRule 枚舉的文檔 特別聲明它不直接映射到 ISO 8601",并鏈接到 Microsoft .Net 中的 ISO 8601 一年中的一周格式,一個描述差異的博客條目.
The documentation for the CalendarWeekRule enumeration specifically states that it "does not map directly to ISO 8601", and links to ISO 8601 Week of Year format in Microsoft .Net, a blog entry that describes the differences.
這篇關于System.Globalization.Calendar.GetWeekOfYear() 返回奇數結果的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!