-
makz (03.12.11 11:46) [0]Где можно подглядеть алгоритм проверки попадания timestamp в расписание по типу task shcheduller'а в windows(записи типа "по вторникам", "последний понедельник месяца", "каждое 1, 3, 5 число")?
Сделал базу с расписанием:
CREATE TABLE TIMETABLE (
ID TID NOT NULL /* TID = INTEGER */,
SPECIALIST FKEY NOT NULL /* FKEY = INTEGER */,
REJIM TINTPARAM /* TINTPARAM = INTEGER */,
BEGTIME TIME NOT NULL,
ENDTIME TIME NOT NULL,
BEGDATE DATE NOT NULL,
ENDDATE DATE,
MONTHS VARCHAR(100),
DAYS VARCHAR(100),
DAYSOFWEEK VARCHAR(30)
В поле REJIM - режим работы (по дням, по дням недели, по дням месяца, по дням недели и месяца)
В полях MONTHS, DAYS, DAYSOFWEEK через запятую номера месяцев и т.д.
SPECIALIST - внешний ключ.
Осталось самое простое :) :написать процедуру проверки попадания заданного TIMESTAMP в график. Нет ли где подобного, не обязательно на firebird? -
Плохиш © (03.12.11 13:06) [1]Алгоритм полностью совпадает с алгоритмом определения дня рождения и каникул.
-
DiamondShark © (03.12.11 15:09) [2]
> makz (03.12.11 11:46)
1. Проверить на попадание в диапазон BEGDATE .. ENDDATE.
2. Разобрать TIMESTAMP на компоненты: день, месяц, день недели, время
3. проверить компоненты на попадание в свои диапазоны и списки.
В чём проблема-то? -
makz (04.12.11 06:13) [3]Проблем то нет, кроме того что возни много: лень велосипед изобретать.
-
> Где можно подглядеть алгоритм проверки попадания timestamp
> в расписание по типу task shcheduller'а в windows(
Там не так сделано. Там вычисляется время следующего запуска. -
DiamondShark © (05.12.11 02:45) [5]
> Ega23 © (04.12.11 16:52) [4]
Что совой об пень, что пнём по сове.
> makz (04.12.11 06:13) [3]
Хороший подход.
Вот смотри, с 03.12.11 11:46 по 04.12.11 06:13 сколько времени прошло? Грубым счётом -- 18 часов. А задача не решена. Хотя изобретение велосипеда даже у новичка заняло бы пару часов.
Экономии на копейку, потерь на рубль -- вот цена халявы.