2

私は問題に直面しています。私のプログラムに書かれたロジックは以下のとおりです

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

lastDate の月が 12 月で、12 が 1 0r 2 より大きくなることはないため、このコードを正月の 1 月または 2 月に実行すると、このコードは失敗します。

ループが Nov、Dec、Jan、Feb などを通過できるロジックを記述する必要があります。

私は動作しているコードの下に書きましたが、終了する手がかりがありません。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

4 に答える 4

1

リストには常に 12 か月を追加するため、for-loopを使用できます。

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

1 か月に何回足す必要があるかはご存じのとおり、年月に応じた条件は必要なく、このコードをちょうど 12 回実行するためのカウンターのみが必要です。

于 2013-04-29T06:34:17.753 に答える
0

これにより、lastDate から 12 個の DateTimes がリストに追加されます:)

list.AddRange(Enumerable.Range(0,12).Select(v => lastDate = lastDate.AddMonths(1)));
于 2013-04-29T07:02:10.270 に答える
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
于 2013-04-29T06:37:51.467 に答える