2012-08-09 58 views

回答

2

如何:

int year = 2012; 
int weekNumber = 29; 

var thursdayInWeek01 = Enumerable.Range(1, 7).Select(i => new DateTime(year, 1, i)) 
    .First(d => d.DayOfWeek == DayOfWeek.Thursday); 
var thursdayInCorrectWeek = thursdayInWeek01.AddDays((weekNumber - 1) * 7); 

var firstDay = thursdayInCorrectWeek.AddDays(-3); 
var lastDay = thursdayInCorrectWeek.AddDays(3); 

這是ISO風格週數。

+0

我認爲這可能是在邊緣情況下。如果1月1日是星期五,你認爲星期五到星期一星期,還是一星期,或者什麼?在你的代碼中,你假裝甚至不到一週。 (我認爲) – Servy 2012-08-09 16:25:57

+0

@Servy否,它是[ISO周](http://en.wikipedia.org/wiki/ISO_week_date)號碼。如果1月1日是星期五,那一週是上一年的53周(前一年有53個星期四)。在那種情況下,第一週將在1月4日開始。任何一週從星期一開始,到星期天結束,甚至在兩個日曆年之內。以上算法在邊緣情況下也是精確的。我住的地方通常會使用ISO週數(丹麥)。 – 2012-08-09 21:19:05

相關問題