2011-08-29 50 views
1

我有兩個日期時間範圍8/27/2011和8/31/2011我怎麼能讓所有的日子?這樣的:2011年8月28日,2011年8月29日和2011/8/30如何讓範圍內的日子

感謝

+0

在這裏很好的回答:http://stackoverflow.com/questions/1847580/how-do-i-loop-through-a-date-range – RiddareRalf

+0

是的,謝謝。不錯的 –

回答

3

上捎帶關閉davecoulter的,如果你需要要在您的DateTime對象的所有應用程序中執行此操作,您可能需要爲DateTime對象定義一個Extenion方法。

void Main() 
{ 
    DateTime today = new DateTime(2011, 8, 29); 
    DateTime nextWeek = new DateTime(2011, 9, 4); 

    foreach (DateTime dateTime in today.ListAllDates(nextWeek)) 
    { 
     Console.WriteLine(dateTime); 
    } 
    Console.ReadLine(); 
} 

public static class DateTimeExtenions 
{ 
    public static IEnumerable<DateTime> ListAllDates(this DateTime lhs, DateTime futureDate) 
    { 
     List<DateTime> dateRange = new List<DateTime>(); 
     TimeSpan difference = (futureDate - lhs); 
     for(int i = 0; i <= difference.Days; i++) 
     { 
      dateRange.Add(lhs.AddDays(i)); 
     } 
     return dateRange; 
    } 
} 

您可以直接複製到LinqPad並運行程序來測試它。

+1

不錯的一個!既然你返回一個'IEnumerable <...>',我建議把它作爲'iterator'方法,並簡單地'產生返回lhs.AddDays(i);'。這樣,你根本不需要'dateRange',結果就會被懶惰地評估。 (當你不需要遍歷整個範圍時可能很有用。) – Heinzi

1

創建從兩個日期時間日期時間新的日期,以確保其他們在一天的開始。然後運行一個for循環,從starttime.Ticks運行到endtime.Ticks並按TimeSpan.TicksPerDay遞增,並創建一個新的DateTime,並將其添加到每個值的列表中。下面的例子不包括結束日期,但你可以很容易地解決這個問題。

var start= new DateTime(2009,01,01).Ticks; 
    var end= new DateTime(2009,01,10).Ticks; 
    List<DateTime> dates = new List<DateTime>(); 
    for (var i = start; i < end; i+=TimeSpan.TicksPerDay) { 
     dates.Add(new DateTime(i)); 
} 

或者你也可以在它們之間循環並調用AddDays方法。

4

下面的代碼片段,以獲得包括起始和結束日期之間的所有天:

DateTime today = new DateTime(2011, 8, 29); 
DateTime nextWeek = new DateTime(2011, 9, 4); 

TimeSpan difference = nextWeek - today; 

List<DateTime> days = new List<DateTime>(); 

for (int i = 0; i <= difference.Days; i++) 
{ 
    days.Add(today.AddDays(i)); 
} 

foreach (var dateTime in days) 
{ 
    Console.WriteLine(dateTime); 
} 
Console.ReadLine(); 

輸出:

8/29/2011 12:00:00 AM 
8/30/2011 12:00:00 AM 
8/31/2011 12:00:00 AM 
9/1/2011 12:00:00 AM 
9/2/2011 12:00:00 AM 
9/3/2011 12:00:00 AM 
9/4/2011 12:00:00 AM 
3
using System; 
using System.Linq; 

var startDate = new DateTime(2011, 9, 1); 
var days = Enumerable.Range(0, 10).Select(n => startDate.AddDays(n)); 
相關問題