Разбивка периода даты на месяцы

Здравствуйте, уважаемые форумчане! Есть такая задача. При вводе начало и конец периода, на listview выводило количество дней и разбивка на месяцы. Например: Нач.пер. 21/01/15 кон.пер. 25/03/15. А результат должен быть таким: 21/01/15 — 31/01/15 — 11 дней; 01/02/15-28/02/15 — 28 дней; и 01/03/15 — 25/03/15 — 25 дней.
В форме имею два dateTimePicker (начало и конец периода), один ListView (здесь имею три столбика — начало периода, конец периода и количество дней) и кнопку button.
Прошу помощи, в решении этой задачи.

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                 int a, b, c;
                 b = Convert::ToInt32(dateTimePicker1->Text->Substring(3,2));
                 c = Convert::ToInt32(dateTimePicker1->Text->Substring(0,2));
                 p = Convert::ToInt32(dateTimePicker2->Text->Substring(3,2));
                 while (b < p)
                 {
                   b ++;
                   switch (b)
                     {
                       case 1:  dni = 31; d_b = 1; d_f = 31; break;
                       case 2:  dni = 28; d_b = 01; d_f = 28;break;
                       case 3:  dni = 31; d_b = 1; d_f = 31;break;
                       case 4:  dni = 30; d_b = 1; d_f = 30;break;
                       case 5:  dni = 31; d_b = 1; d_f = 31;break;
                       case 6:  dni = 30; d_b = 1; d_f = 30;break;
                       case 7:  dni = 31; d_b = 1; d_f = 31; break;
                       case 8:  dni = 31; d_b = 1; d_f = 31; break;
                       case 9:  dni = 30; d_b = 1; d_f = 30; break;
                       case 10: dni = 31; d_b = 1; d_f = 31; break;
                       case 11: dni = 30; d_b = 1; d_f = 30; break;
                       case 12: dni = 31; d_b = 1; d_f = 31; break;
                          };
   if (b!=0)
   {
   delta = dni - c
   listView1->Items->Add(Convert::ToString(dateTimePicker1->Value.ToShortDateString()));
listView1->Items[i]->SubItems->Add(Convert::ToString(dateTimePicker1->Value.AddDays(delta).ToShortDateString()));
listView1->Items[i]->SubItems->Add(Convert::ToString(delta));
}
else
  {
   delta = dni - d_b;
listView1->Items->Add(Convert::ToString(dateTimePicker1->Value.AddDays(d_b).ToShortDateString()));
listView1->Items[i]->SubItems->Add(Convert::ToString(dateTimePicker1->Value.AddDays(delta).ToShortDateString()));
listView1->Items[i]->SubItems->Add(Convert::ToString(delta));
}
}

После выполнения этого куска программы, в listview добавляется первый месяц с разбивкой нормально, а потом остальные записи добавляются неправильно. т.е. добавляются одинаковые записи на одного месяца, например:
22/04/15 30/04/15 9
01/05/15 31/05/15 30
01/05/15 31/05/15 30
01/05/15 31/05/15 30
01/05/15 31/05/15 30

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.