Попытка эмулировать опрокидывание 24-часовых часов вручную (с математикой против использования классов временного интервала). Инкрементную часть было легко понять, как переворачивать с 23:00 до 0:00 и обратно, но заставить его пойти другим путем оказывается действительно непонятным. Вот что у меня есть:
static void IncrementMinute(int min, int incr)
{
int newMin = min + incr,
hourIncrement = newMin / 60;
//increment or decrement the hour
if((double)newMin % 60 < 0 && (double)newMin % 60 > -1)
hourIncrement = -1;
Console.WriteLine("Hour increment is {0}: ", hourIncrement);
}
Проблема, которую я нахожу, заключается в том, что при движении назад, если модуль находится между числами, он не будет правильно уменьшаться. Пример: это 12:00, а вы вычитаете 61 минуту, мы знаем, что время будет 10:59, так как час должен откатиться на 1 час для перехода с 12:00 до 11:59, а затем снова на переход от 11:00 до 10:59. К сожалению, способ, которым я его вычисляю: newMin% 60 в этом случае захватывает только откат первого часа, но так как второй откат технически равен -1.0166 как остаток, и так как мод возвращает только целое число, его округление округляется. Я уверен, что мне здесь не хватает элементарной математики, но кто-нибудь может мне помочь?
РЕДАКТИРОВАТЬ: Я написал это несколькими способами, длинными и короткими. Некоторые ближе, чем другие, но я знаю, что это проще, чем кажется. Я знаю, что это похоже на то, «что он делал», но вы должны в основном увидеть, что я пытаюсь сделать. Увеличить часы и перенести их с 23:59 на 0:00 легко. Движение назад оказалось не таким легким.
ОК, вот время увеличения с переключением. Просто. Но попробуйте вернуться назад. Не работает.
static void IncrementMinute(int min, int incr)
{
int newMin = min + incr,
hourIncrement = newMin / 60;
min = newMin % 60;
Console.WriteLine("The new minute is {0} and the hour has incremented by {1}", min, hourIncrement);
}