从TimeDelta.Elapsed Days每天添加到列表中

时间:2014-03-18 17:24:14

标签: c# list datetime

我很擅长使用DateTime,但我想知道它是否能够动态地将两点之间的每一天添加到列表中。

例如,我的代码如下所示:

{
  startTime = new DateTime(startYear, startMonth, startDay);
  endTime = new DateTime(endYear, endMonth, endDay);        
  TimeSpan elapsed = endTime.Subtract(startTime);               
  startString = startDay.ToString();
  elapsedString = elapsed.TotalDays.ToString();
}

通过这个我可以返回两点之间的总天数。但是,elapsed.TotalDays.ToString();仅返回两点之间的总天数。我想知道的是,是否可以在两点之间每天返回并将其放入列表中?

3 个答案:

答案 0 :(得分:3)

您可以使用Enumerable.Range

执行此操作
using System;
using System.Linq;

var totalDays = (int)endTime.Subtract(startTime).TotalDays;
var days = Enumerable.Range(0, totalDays)
                     .Select(n => startTime.AddDays(n))
                     .ToList();

开始和结束都包含在days列表中。首先将范围设置为从零开始,然后单独留下n

答案 1 :(得分:3)

我认为您可以使用

进行迭代
list<int>Dates = new List<int>();

for(DateTime date = StartDate; date.Date <= EndDate.Date; date = date.AddDays(1))
{
  Dates.Add(date.Date);
}

答案 2 :(得分:2)

尝试一下,它应该有效:

int totalDays = endTime.Subtract(startTime).TotalDays as int;
List<DateTime> dates = new List<DateTime>(totalDays + 1); // using this constructor will make filling in the list more performant

dates.Add(startTime); // since you mentionned start and end should be included

for (var i = 1; i < totalDays; i++)
{
    dates.Add(startTime.AddDays(i));
}

dates.Add(endTime);