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

本文关键字:一年 循环 | 更新日期: 2023-09-27 18:11:22

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

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

当lastDate月份为Dec时,此代码失败,并且我在新年的1月或2月执行此代码,因为12永远不会大于10或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);
   }

}

请帮我一下

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

您总是将12个月添加到列表中,因此您可以使用for -loop:

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

正如您知道一个月需要加多少次一样,不需要根据月份和年份设置条件,只需要一个计数器来执行该代码12次。

这可能有帮助:

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

希望这能解决你的问题:

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);
}

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

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