Подсчитайте количество минут до следующего запуска - PullRequest
3 голосов
/ 31 марта 2011

Это должно быть тривиально, но мой мозг сегодня вечером сталкивается с кирпичной стеной.

У меня есть процесс, который будет запускаться один раз, затем каждые n минуты ежечасного смещения.

Например, 15 минут - время в часах (скажем, 1), затем 1:15, 1:30, 1:45 и т. Д.

Если интервал выполнения равен 15, начальное выполнение выполняется в 1:07 и продолжается до 1:11, ожидание следующего выполнения будет через 4 минуты.

Если интервал выполнения равен 15, начальное выполнение выполняется в 1:07 и продолжается до 1:16, ожидание следующего выполнения составит 14 минут (время выполнения не перекрывается).

Итак, после каждого прогона (различной длины), как рассчитать количество минут ожидания до следующего выполнения?


Я не размещаю здесь никакого примера кода, потому что у меня нет ничего, что могло бы пройти мои модульные тесты (я не настолько безумный, что не могу написать эти ! ).

Я пометил это как C#, так как это то, что я кодирую, но я ожидаю, что решение не зависит от языка.

Ответы [ 4 ]

3 голосов
/ 31 марта 2011

Ладно, как только я нажму "Отправить" по этому вопросу, у меня было прозрение.

Учитывая currentMinute> = 0 и executionInterval> = 1

absolute-value((currentMinute modulo executionInterval) - executionInterval)

или, в C #

return Math.Abs((currentMinute % executionInterval) - executionInterval);

, пока мои модульные тесты проходят на этом.Так что, либо это правильно, либо мне не хватает тестов ....

1 голос
/ 31 марта 2011

Это может быть немного более мощное решение, которое вам нужно, но если вы хотите, чтобы конечный пользователь указал интервал, вы можете предложить ему больше, чем просто опцию «указать интервал в минутах:». Взгляните на Cron формат . Это позволяет вам указать любые странные сложные временные интервалы.

Хорошей новостью является то, что существует множество реализаций библиотек crontab, некоторые из которых предназначены для C #. Проверьте NCrontab , у него есть полезные методы, такие как GetNextOccurences, которые будут вычислять даты на основе ввода интервала и текущего времени. Если вы используете его, вы можете сэкономить время на реализации этой функции, сделав ее более полезной и полезной.

1 голос
/ 31 марта 2011

Преобразовать в минуты, изменить на 15, добавить 1, умножить на 15, вычесть исходное число.

// n is time in minutes
int m = n%exec_time;
m += 1;
return m*exec_time - n;
0 голосов
/ 23 мая 2013
  • M = минут до следующего запуска
  • To = общее количество минут, прошедших с первого запуска (в C # вычтите текущее время из первого запуска и получите TimeSpan.TotalMinutes)
  • I = интервал в минутах

    M = I - (до% I)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...