2010-04-21 29 views
9

我通過每一個試圖循環DAYof一週我設法用得到這些日期之間的天數2個時間段通過一週的天循環C#時間跨度內

DateTime start = new DateTime(2010, 1, 1); 
    DateTime end = new DateTime(2011, 12, 12); 

之間下面的代碼

 TimeSpan range = (end - start); 

練得710

我現在希望得到每月一週的日子,

例如

1月 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 171 18 19 20。 。 。

與匹配

中號T W&五六S M T W&五六S M

我瞭解C#有從DateTime類DAYOFWEEK一個屬性,它獲取本週 我的問題是構建一個循環做以上的天?

有人嗎?

+1

快速方式:http://stackoverflow.com/questions/22258070/datetime-dayofweek-micro-optimization – rpax 2014-03-09 13:04:35

回答

20

這將遍歷從開始日期到結束日期的所有日期,併爲每個日期獲取星期幾。

DateTime startDate = new DateTime(2010, 1, 1); 
DateTime endDate = new DateTime(2011, 12, 12); 
for (DateTime date = startDate; date <= endDate; date = date.AddDays(1)) 
{ 
    DayOfWeek dw = date.DayOfWeek; 
    // ... 
} 

除非你真的擔心優化,否則我不會爲任何更復雜的事情而發愁。

+0

爲(日期時間日期=的startDate;日期<=結束日期;日期= date.AddDays(1)) { DayOfWeek dw = date.DayOfWeek; // ... } 非常感謝,感謝它:) – Calibre2010 2010-04-21 14:42:15

+0

如果他真的很擔心優化,他可以看看到http://stackoverflow.com/questions/22258070/datetime-dayofweek-micro優化。這很有趣 – rpax 2014-03-09 13:04:05

+0

幾乎沒有什麼值得用一種定製(也可能是越野車)函數替代庫方法的麻煩,尤其是當它甚至不改變Big-O複雜性時。而且,如果您在*真正嚴格的性能限制下運行,您可以簡單地完全避免整個計算,只需通過簡單的測試條件就可以從1循環到7。我更喜歡上面的方法,因爲它很容易閱讀/理解,其中10次中有9次應該是你的目標。 – Aaronaught 2014-03-09 15:39:19

3

我喜歡以下幾點:

static IEnumerable Days(DateTime start, DateTime end) 
{ 
    while (start < end) 
    { 
     string day = start.ToString("ddd"); 

     start = start.AddDays(1); 

     yield return day; 
    } 
} 

如何使用它:

foreach(string s in Days(new DateTime(2010, 1, 1), new DateTime(2010, 2, 1))) 
{ 
    Console.WriteLine(s); 
} 

您可以修改它返回不同類型的,當然。

2

使用LINQ:

DateTime start = new DateTime(2010, 1, 1); 
DateTime end = new DateTime(2011, 12, 12); 
int days = (end - start).Days; 

Enumerable 
    .Range(0, days) 
    .Select(x => start.AddDays(x)) 
    .ToList() 
    .ForEach(d => 
    { 
     DayOfWeek dayOfWeek = d.DayOfWeek; 
     // do what you want 
    }); 
+0

不錯的解決方案:) – 2010-04-21 16:39:35