我使用以下方法在两个给定日期之间创建日期序列;
public List<DateTime> dateSeq(DateTime startDate, DateTime endDate)
{
List<DateTime> allDates = new List<DateTime>();
for (DateTime date = startDate; date <= endDate; date = date.AddMonths(1))
allDates.Add(date);
return allDates;
}
在递增1个月时创建日期序列,例如给定日期为:
startDate: 2017-01-01
endDate: 2017-05-01
我得到的顺序很好:
2017-01-01
2017-02-01
2017-03-01
2017-04-01
2017-05-01
但是当给定的日期是:
startDate: 2017-01-31
endDate: 2017-05-31
我在2月份通过的序列失败,在第28天设定剩余的月份序列:
2017-01-31
2017-02-28
2017-03-28
2017-04-28
2017-05-28
有人可以解释一下为什么会这样吗?
答案 0 :(得分:2)
因为2017-02-31
不存在而2017-02-28.AddMonth(1)
导致2017-03-28
这是正确的。
我认为你正在寻找一种维持最初开始日的方法
public IEnumerable<DateTime> dateSeq(DateTime startDate, DateTime endDate)
{
int temp = 0;
while (startDate.AddMonths(temp) <= endDate)
yield return startDate.AddMonths(temp++);
}