在c#中循环当前年月到下一个月

时间:2013-04-29 06:30:54

标签: c# asp.net loops

我遇到了问题,我的程序中写的逻辑在

之下
while (lastDate.Month < DateTime.Today.Month - 1)//
  {
    lastDate= lastDate.AddMonths(1);
    list.Add(lastDate);
  }

当lastDate月份为Dec并且我在新年的1月或2月执行此代码时,此代码失败,因为12将永远不会大于1 0r 2。

我需要编写一个逻辑,我的循环可以遍历11月,12月,1月,2月等等。

我写了下面的代码正在运行但是我没有得到退出的线索,当lastDate和今天的日期之间的差异是2个月时循环应该退出。

if (lastDate.Month > DateTime.Today.Month && lastDate.Year < DateTime.Today.Year)
 {
  while (lastDate.Year <= DateTime.Today.Year)
   {
     lastDate= lastDate.AddMonths(1);
     list.Add(lastDate);

   }

}

请帮助我

4 个答案:

答案 0 :(得分:1)

您将始终在列表中添加12个月,因此您可以使用for循环:

for(var i = 0; i < 12; i++)
{
    lastDate = lastDate.AddMonths(1);
    list.Add(lastDate);
}

如您所知,您需要添加一个月的次数,根据月份和年份不需要有条件,但只需要一个计数器来执行此代码12次。

答案 1 :(得分:0)

这可能会有所帮助:

DateTime lastDate = DateTime.ParseExact("01/12/12", "dd/MM/yy", System.Globalization.CultureInfo.InvariantCulture);

List<DateTime> result = new List<DateTime>();

//iterate until the difference is two months 
while (new DateTime((DateTime.Today - lastDate).Ticks).Month >= 2)
{
    result.Add(lastDate);
    lastDate = lastDate.AddMonths(1);
}

//result: 12/1/2012
//         1/1/2013
//         2/1/2013
//         3/1/2013

答案 2 :(得分:0)

希望这可以解决您的问题:

DateTime lastDate = new DateTime(2012, 1, 1);
List<DateTime> list = new List<DateTime>();

while (lastDate < (DateTime.Today.AddMonths(-3))) //difference between today and lastDate should be 2 month
{
  lastDate = lastDate.AddMonths(1);
  list.Add(lastDate);
}

答案 3 :(得分:0)

这会将lastDate中的12个DateTimes添加到您的列表中:)

list.AddRange(Enumerable.Range(0,12).Select(v => lastDate = lastDate.AddMonths(1)));