Определите, попадают ли день недели и время в произвольный период выходных - PullRequest
0 голосов
/ 22 марта 2010

Я пытался придумать метод, который, учитывая день недели и время дня, вернется, если он подпадает под произвольный период выходных.

Период выходных сохраняется в 4 переменных следующим образом:

  1. День недели, когда начинается (0-6)
  2. Время дня, когда оно начинается (0-23)
  3. День недели, когда она заканчивается (0-6)
  4. Время суток, когда оно заканчивается (0-23)

Исходя из этих полей, период выходных может быть любым, выбранным пользователем (даже если он значительно превышает обычные выходные)

Я трахался с этим некоторое время, но безрезультатно. Я пытаюсь сделать это в Delphi, но подойдет любой язык, так как я ищу алгоритм, а не реализацию.

Ответы [ 3 ]

1 голос
/ 22 марта 2010

Я предполагаю, что есть также ограничение, что конечная точка> = начальная точка.

Самый простой способ - нормализоваться до «часов с начала недели».

double interest = day * 24 + hours;
double startWeekend = startDay * 24 + startHours;
double endWeekend = endDay * 24 + endHours.
bool isInWeekend = interest >= startWeekend && interest < endWeekend;

Настройте <= и> = по желанию.

Редактировать:

Если проблема в том, что выходные могут перекрывать 7 * 24-часовую границу, тогда становится немного интереснее:

if startWeekend < endWeekend
then isInWeekend = interest >= startWeekend AND interest < endWeekend;
else isInWeekend = interest >= startWeekend OR interest < endWeekend;

(слегка смешанный C/ Псевдокод Паскаля)

0 голосов
/ 23 марта 2010

Если вы хотите обрабатывать интервалы, которые переносятся,

double hstart = startDay*24 + startHour;
double hend = endDay*24 + endHour;
double htest = testDay*24 + testHour;
return (hend-hstart)*(htest-hstart)*(hend-htest) > 0
0 голосов
/ 22 марта 2010

Назовите эти четыре значения: d start , d end для дня и h start , h end для часов. Затем рассмотрим общее количество часов, начиная с дня 0, час 0, которое задается как t_start = d start * 24 + h start , а также для t_end.

Если текущий час недели до t_end или после t_start, значит, у вас выходной.

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