Этот вопрос в основном касается представления модульной арифметической концепции в коде и использования знака по модулю.Как рассчитать интервалы времени с использованием модульной арифметики?
Так недавно я сделал всплывающее окно для установки SCCM, которое должно предоставить пользователю время для установки приложения, а запросы клиента должны были показать пользователю часы с количеством оставшегося времени до установки (или позволить пользователю установить его сейчас как Что ж). Количество часов на часах, которые они хотели, составляло 24 часа, а также время, оставшееся до 4 вечера, когда прошло 24 часа:
Программа работает в 13:00, тогда часы должны отображать 24 +3 = 27 часов
, когда 16:00 она должна быть 24 + 24, который составляет 48 часов
, когда 22:00 он должен быть 24 + 18, 42 часа
Теперь я заметил, что:
13 + 27 = 40
16 + 24 = 40
22 + 18 = 40
40 Модульное 24 = 16
Поэтому в основном, если я вычесть текущее время от 40 потом будет влево с той разницей:
40 - 13 = 27
40 - 16 = 24
40 - 22 = 18
Так что я сделал это:
//I need to make a timespan object which has 24 hours from current time + time left to the next 4pm
//The context is time to install, which user should see
Timespan TimeToInstall = new Timespan(23,59,59)
DateTime Now = DateTime.Now;
if (Now.Hour < 16)
{
long TimeTo4 = (new TimeSpan(40, 0, 0).Ticks - Now.TimeOfDay.Ticks);
TimeToInstall = TimeSpan.FromTicks(TimeTo4);
}
else
{
long TimeTo4 = (new TimeSpan(40, 0, 0).Ticks - Now.TimeOfDay.Ticks) + TimeGiven.Ticks;
TimeToInstall = TimeSpan.FromTicks(TimeTo4);
}
Проблема с выше решения заключается в том, что я знаю, что это может быть короче, потому что, когда я вычитать раз превышает время до 4 часов, то я не должен добавьте 24 часа, если время выполнения выше или равно 4 часа дня, тогда мне нужно добавить 24 часа. У меня есть общее представление о том, как реорганизовать это в математике/псевдокоде, например:
абсолютное (16-13) по модулю 24 = 3
абсолютное (16-16) по модулю 24 = 0 (24)
absolute (16-22) modulo 24 = 18
Вопрос в том, как это сделать в коде C# для реорганизации этого кода? Пожалуйста, используйте любой язык, который вам нравится, но я бы очень понравился на примере C#. Спасибо, ребята
@Prix это вопрос, как сделать что-то в коде, не вопрос для проверки кода, я просто добавил его дополнительно. –