2013-01-09 30 views
0

我搜索了一個類似的帖子,但似乎沒有人回答這個問題。.NET Calendar.GetWeekOfYear返回不正確的結果en-US

對於日期01/01/20052008年12月28日,星期數應爲1,根據該timeanddate.com的網站,假設它是正確的:

01/01/200512/28/2008

問題是,C#代碼我有產生用於01/01/2005正確的星期數的結果,但對於2008年12月28日,返回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,我使用的EN-US區域性的默認選項。

+2

是不是[this](http://stackoverflow.com/questions/428957/is-net-giving-me-錯誤的週數爲12月29日?rq = 1)同樣的事情? –

+0

這很接近,該職位與ISO 8601相關,我正在查看en-US。我認爲* timeanddate.com日曆是錯誤的。據維基百科(http://bit.ly/11gklmV),加拿大,美國和墨西哥,今年的第一週有1月1日和第一個星期六。 timeanddate.com網站2008年(美國)顯示12月的最後一週爲第1周,但沒有1月1日或第1個星期六。如果我查看CalendarLabs網站(http://bit.ly/zcHkD),它將在12月的最後一週顯示爲53周,這似乎是正確的。 – user1964087

回答

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

星期四不是對問題中的選項非常重要的那一天,所以這不會回答問題。 – hvd