在两个给定日期之间创建日期序列 - 在2月份失败

时间:2017-09-15 11:05:33

标签: c# date datetime

我使用以下方法在两个给定日期之间创建日期序列;

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

有人可以解释一下为什么会这样吗?

1 个答案:

答案 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++);
}

https://dotnetfiddle.net/Mz7yFh