private void FixAll(ref int year, ref int month, ref int day, ref int hour, ref int minute, ref int second, ref int milisecond) { FixOne(ref milisecond, 1000, ref second); FixOne(ref second, 60, ref minute); FixOne(ref minute, 60, ref hour); FixOne(ref hour, 24, ref day); FixMonthYear(ref year, ref month); int maxDay = DateCalendar.GetDaysInMonth(year, month); if (day < 1 || day > maxDay) { if (day < 1) { while (day < 1) { month--; FixMonthYear(ref year, ref month); maxDay = DateCalendar.GetDaysInMonth(year, month); day += maxDay; } } else { while (day > maxDay) { day -= maxDay; month++; FixMonthYear(ref year, ref month); maxDay = DateCalendar.GetDaysInMonth(year, month); } } } FixMonthYear(ref year, ref month); }