在给定开始日期和结束日期的情况下是否有快速且简单的方式获取List<DateTime>
?获取开始日期和结束日期的简单方法
我明显知道我可以通过循环实现这一点,但我想知道是否有更智能的方法使用Linq或其他实用程序。
注意我需要得到一个DateTime
例如为每一天,两个给定日期之间。
在给定开始日期和结束日期的情况下是否有快速且简单的方式获取List<DateTime>
?获取开始日期和结束日期的简单方法
我明显知道我可以通过循环实现这一点,但我想知道是否有更智能的方法使用Linq或其他实用程序。
注意我需要得到一个DateTime
例如为每一天,两个给定日期之间。
迭代器块很适合这个。
我看到没有理由不在这里使用for
循环。您需要为每个日期执行一些运算符,因为您有很多输出,没有方法会有更好的渐近复杂性。
您可以添加一个过载固定的时间间隔,以及:
public static IEnumerable<DateTime> GetDays(DateTime startDate, DateTime endDate)
{
return GetDates(startDate, endDate, TimeSpan.FromDays(1));
}
懒惰评估查询可能看起来像:
//inclusive start and inclusive end
public IEnumerable<DateTime> DateSequence(DateTime start, TimeSpan interval, DateTime end)
{
DateTime current = start;
while(current <= end)
{
yield return current;
current = current.Add(interval);
}
}
现在,你可以简单地使用它像以下。为了让每天设定的时间间隔,以TimeSpan.FromDays(1)
var start = DateTime.Now;
var end = DateTime.Now.AddDays(7);
var interval = TimeSpan.FromDays(1);
var sequence = DateSequence(start, interval, end);
//LinqPad specific call
sequence.Dump();
打印:
1/14/2013 5:34:57 PM
1/15/2013 5:34:57 PM
1/16/2013 5:34:57 PM
1/17/2013 5:34:57 PM
1/18/2013 5:34:57 PM
1/19/2013 5:34:57 PM
1/20/2013 5:34:57 PM
假设你每天要粒度,并包括开始和结束日期:
var start = new DateTime(2012, 01, 01);
var end = new DateTime(2013, 01, 01);
var daysInBetween = Enumerable.Range(0, (int) (end - start).TotalDays + 1)
.Select(value => start.AddDays(value));
你想把两个日期放在一个列表中......? '新列表 {dateTime1,dateTime2};' –
Mir
你在寻找什么样的粒度? –
@MrLister我每天需要'DateTime' – davioooh