2011-02-17 160 views
1

我有两个日期获取范围之间的日期,C#

  1. 21/01/2011 [起始日期]
  2. 25/01/2011 [结束日期]

如何获得这些范围之间的所有日期使用c#

答案应该是

21/01/2011
22/01/2011
23/01/2011 24/01/2011

25/01/2011

回答

8
var allDates = Enumerable.Range(0, int.MaxValue) 
         .Select(x => fromDate.Date.AddDays(x)) 
         .TakeWhile(x => x <= toDate.Date); 
+3

+1:在Linq看起来很漂亮:o) – 2011-02-17 11:03:41

2
var dateArr = new List<DateTime>(); 

for (var date = startDate; date <= endDate; date = date.AddDays(1)) { 
    dateArr.Add(date); 
} 

现在dateArr包含你需要的日期。

2
public System.Collections.Generic.IEnumerable<DateTime> GetDatesBetween(
    DateTime start, 
    DateTime end 
    ) 
{ 
    DateTime current = start; 
    while (current <= end) 
    { 
     yield return current.Date; 
     current = current.AddDays(1); 
    } 
} 

应该做的工作

[编辑]增加了.Date以 “圆” 的日期midnigth

2

如何:

 var startDT = new DateTime(2011, 01, 21); 
     var endDT = new DateTime(2011, 01, 25); 
     var workDT = startDT; 
     do 
     { 
      Console.WriteLine(workDT.ToString("dd/MM/yyyy")); 
      workDT = workDT.AddDays(1); 
     } while (workDT <= endDT); 
     Console.ReadLine(); 
2

我不知道,如果我们有什么可以做到这一点在框架内置,但你可以试试这个:

DateTime dt1 = new DateTime(2011,01,21); 
DateTime dt2 = new DateTime(2011,01,25); 
List<DateTime> datetimerange = new List<DateTime>(); 
while(DateTime.Compare(dt1,dt2) <= 0) 
{ 
     datetimerange.Add(dt1); 
     dt1 = dt1.AddDays(1); 

} 
0
if (toDate < fromDate) 
    return; 

var days = (new DateTime[(toDate - fromDate).Days + 1). 
      Select((x, i) => fromDate.AddDays(i));