例如,如果我将 startdate 作为15-mar-2009和 enddate 作为2010年3月15日,我希望得到如下所示的日期范围,
Start Date End Date
15-mar-2009 15-Apr-2009
15-apr-2009 15-may-2009
...
15-mar-2010 15-apr-2010
任何人都可以帮我解决这个问题。
答案 0 :(得分:1)
你可以尝试这样的东西,有一个返回IEnumerable<DateTime>
的扩展方法(或非扩展方法),你可以迭代它或在linq表达式等中使用它。
public static IEnumerable<DateTime> EnumerateUntilAfter(this DateTime startDate, DateTime endDate)
{
if(endDate < startDate)
throw new ArgumentOutOfRangeException("End date must be less than start date");
return EnumerateUntilAfterImpl(startDate, endDate);
}
private static IEnumerable<DateTime> EnumerateUntilAfterImpl(DateTime startDate, DateTime endDate)
{
while (startDate <= endDate)
{
yield return startDate;
startDate = startDate.AddMonths(1);
}
}
像
一样使用public void DoTheThing(DateTime start, DateTime end)
{
Console.WriteLine("StartDate\tEndDate");
foreach (var date in start.EnumerateUntilAfter(end))
Console.WriteLine("{0}\t{1}", date, date.AddMonths(1));
}
给你
StartDate EndDate
15-Mar-2009 15-Apr-2009
15-Apr-2009 15-May-2009
15-May-2009 15-Jun-2009
15-Jun-2009 15-Jul-2009
15-Jul-2009 15-Aug-2009
15-Aug-2009 15-Sep-2009
15-Sep-2009 15-Oct-2009
15-Oct-2009 15-Nov-2009
15-Nov-2009 15-Dec-2009
15-Dec-2009 15-Jan-2010
15-Jan-2010 15-Feb-2010
15-Feb-2010 15-Mar-2010
15-Mar-2010 15-Apr-2010