Джон, спасибо, вы абсолютно правы, позвольте мне добавить отсутствующий метод next (), который находится внутри класса:
public date Next(date d)
{
if (!d.valid()) return new date();
date ndat = new date((d.Day() + 1), d.Month(), d.Year());
if (ndat.valid()) return ndat;
ndat = new date(1, (d.Month() + 1), d.Year());
if (ndat.valid()) return ndat;
ndat = new date(1, 1, (d.Year() + 1));
return ndat;
}
Так как это использует valid (), я прикреплю это также:
public bool valid()
{
// This method will check the given date is valid or not.
// If the date is not valid then it will return the value false.
if (year < 0) return false;
if (month > 12 || month < 1) return false;
if (day > 31 || day < 1) return false;
if ((day == 31 && (month == 2 || month == 4 || month == 6 || month == 9 || month == 11)))
return false;
if (day == 30 && month == 2) return false;
if (day == 29 && month == 2 && (year % 4) != 0) return false;
if (day == 29 && month == 2 && (((year % 100) == 0) && ((year % 400) != 0))) return false;
/* ASIDE. The duration of a solar year is slightly less than 365.25 days. Therefore,
years that are evenly divisible by 100 are NOT leap years, unless they are also
evenly divisible by 400, in which case they are leap years. */
return true;
}
День (), Месяц () и Год (), я думаю, самоочевиден, но дайте мне знать, если они необходимы. У меня также есть метод previous (), который выполняет противоположность next (), который я хочу использовать в методе --mentment.
Теперь в моей программе
class Program
{
static void Main()
{
date today = new date(7,10,1985);
date tomoz = new date();
tomorrow = today++;
tomorrow.Print(); // prints "7/10/1985" i.e. doesn't increment
Console.Read();
}
}
Так что на самом деле он не дает сбоя, он просто печатает сегодняшнюю дату вместо завтрашней, но работает правильно, если бы я использовал ++ сегодня.
Что касается порядка D / M / Y, да, я согласен, с более высокими частотными данными я могу видеть, как это улучшает ситуацию, я перейду к исправлению этого следующего.