Программа написана у меня. Только есть ошибка - если вводить например 31 января- дата отправления- и 1 февраля - прибытия, то он выдает ошибку, что datetime не может такое посчитать. Я не могу почему -то найти эту ошибку в коде. МОжет опытный глаз программиста сможет увидеть ее?! Код части программы представлен ниже:
| Код |
private void button3_Click(object sender, EventArgs e) { int d1, d2, m1 = 0, m2 = 0, y1, y2, c, b, n, d; //i, r1 = 0, r2 = 0; string mo1, mo2; try { d1 = Convert.ToInt16(comboBox3.Text); } catch (FormatException) { MessageBox.Show("Введите дату правильно!", "Ошибка!"); return; } try { d2 = Convert.ToInt16(comboBox4.Text); } catch (FormatException) { MessageBox.Show("Введите дату правильно!", "Ошибка!"); return; } try { mo1 = Convert.ToString(comboBox1.Text); } catch (FormatException) { MessageBox.Show("Введите дату правильно!", "Ошибка!"); return; } try { mo2 = Convert.ToString(comboBox2.Text); } catch (FormatException) { MessageBox.Show("Введите дату правильно!", "Ошибка!"); return; } try { y1 = Convert.ToInt16(numericUpDown1.Value); } catch (FormatException) { MessageBox.Show("Введите дату правильно!", "Ошибка!"); return; } try { y2 = Convert.ToInt16(numericUpDown2.Value); } catch (FormatException) { MessageBox.Show("Введите дату правильно!", "Ошибка!"); return; } try { ho = Convert.ToInt16(numericUpDown3.Value); } catch (FormatException) { MessageBox.Show("Введите правильно часы!", "Ошибка!"); return; } try { Hp = Convert.ToInt16(numericUpDown5.Value); } catch (FormatException) { MessageBox.Show("Введите правильно часы!", "Ошибка!"); return; } try { mo = Convert.ToInt16(numericUpDown4.Value); } catch (FormatException) { MessageBox.Show("Введите правильно минуты!", "Ошибка!"); return; } try { mp = Convert.ToInt16(numericUpDown6.Value); } catch (FormatException) { MessageBox.Show("Введите правильно минуты!", "Ошибка!"); return; }
switch (mo1) { case "Январь": m1 = 1; break; case "Февраль": m1 = 2; break; case "Март": m1 = 3; break; case "Апрель": m1 = 4; break; case "Май": m1 = 5; break; case "Июнь": m1 = 6; break; case "Июль": m1 = 7; break; case "Август": m1 = 8; break; case "Сентябрь": m1 = 9; break; case "Октябрь": m1 = 10; break; case "Ноябрь": m1 = 11; break; case "Декабрь": m1 = 12; break;
default: MessageBox.Show("Введите дату правильно!", "Ошибка!"); comboBox1.Text = ""; break; } switch (mo2) { case "Январь": m2 = 1; break; case "Февраль": m2 = 2; break; case "Март": m2 = 3; break; case "Апрель": m2 = 4; break; case "Май": m2 = 5; break; case "Июнь": m2 = 6; break; case "Июль": m2 = 7; break; case "Август": m2 = 8; break; case "Сентябрь": m2 = 9; break; case "Октябрь": m2 = 10; break; case "Ноябрь": m2 = 11; break; case "Декабрь": m2 = 12; break;
default: MessageBox.Show("Введите дату правильно!", "Ошибка!"); comboBox1.Text = ""; break; } c = Math.DivRem(y1, 4, out n); c = Math.DivRem(y1, 400, out d); c = Math.DivRem(y1, 100, out b); if ((m1 == 2) && (d1 > 28)) { if (d == 0) { d1 = 29; comboBox3.Text = "29"; } else if (b == 0) { d1 = 28; comboBox3.Text = "28"; } else if (n == 0) { d1 = 29; comboBox3.Text = "29"; } else { d1 = 28; comboBox3.Text = "28"; } } c = Math.DivRem(y2, 4, out n); c = Math.DivRem(y2, 400, out d); c = Math.DivRem(y2, 100, out b); if ((m2 == 2) && (d2 > 28)) { if (d == 0) { d2 = 29; comboBox4.Text = "29"; } else if (b == 0) { d2 = 28; comboBox4.Text = "28"; } else if (n == 0) { d2 = 29; comboBox4.Text = "29"; } else { d2 = 28; comboBox4.Text = "28"; } } if (d1 == 31) switch (m1) { case 4: d1 = 30; comboBox3.Text = "30"; break; case 6: d1 = 30; comboBox3.Text = "30"; break; case 9: d1 = 30; comboBox3.Text = "30"; break; case 11: d1 = 30; comboBox3.Text = "30"; break; case 1: d1 = 31; comboBox3.Text = "31"; break; case 3: d1 = 31; comboBox3.Text = "31"; break; case 5: d1 = 31; comboBox3.Text = "31"; break; case 7: d1 = 31; comboBox3.Text = "31"; break; case 8: d1 = 31; comboBox3.Text = "31"; break; case 10: d1 = 31; comboBox3.Text = "31"; break; case 12: d1 = 31; comboBox3.Text = "31"; break;
} if (d2 == 31) switch (m2) { case 4: d2 = 30; comboBox4.Text = "30"; break; case 6: d2 = 30; comboBox4.Text = "30"; break; case 9: d2 = 30; comboBox4.Text = "30"; break; case 11: d2 = 30; comboBox4.Text = "30"; break; case 1: d1 = 31; comboBox3.Text = "31"; break; case 3: d1 = 31; comboBox3.Text = "31"; break; case 5: d1 = 31; comboBox3.Text = "31"; break; case 7: d1 = 31; comboBox3.Text = "31"; break; case 8: d1 = 31; comboBox3.Text = "31"; break; case 10: d1 = 31; comboBox3.Text = "31"; break; case 12: d1 = 31; comboBox3.Text = "31"; break;
} if (y2 < y1) { MessageBox.Show("Год прибытия не может быть меньше года отправления!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } button1.Enabled = true; }
private void button1_Click(object sender, EventArgs e) { int d1, d2, m1 = 0, m2 = 0, y1, y2, c, b, n, d, i, r1 = 0, r2 = 0; string mo1, mo2; d1 = Convert.ToInt16(comboBox3.Text); d2 = Convert.ToInt16(comboBox4.Text); mo1 = Convert.ToString(comboBox1.Text); mo2 = Convert.ToString(comboBox2.Text); y1 = Convert.ToInt16(numericUpDown1.Value); y2 = Convert.ToInt16(numericUpDown2.Value); c = (d2 - d1) + (m2 - m1) * 31 + r1 + (y2 - y1) * 365 + r2; DateTime u1 = new DateTime((int) y1, (int) m1, (int) d1,(int) ho, (int)mo, 0, 0); DateTime u2 = new DateTime((int)y2, (int)m2, (int)d2, (int)Hp, (int)mp, 0, 0); TimeSpan s = u2.Subtract(u1); textBox1.Text =s.Days.ToString(); textBox2.Text = s.Hours.ToString(); textBox3.Text = s.Minutes.ToString(); } |
Заранее благодарна! В принципе- все остальное- он рассчитывает прекрасно! не знаю почему он не может с этими датами(( |