|
|
|
Задача по определению интервала времени
|
|||
|---|---|---|---|
|
#18+
Есть некое событие, работа, которое характеризуется - датой и временем начала - датой и временем окончания Требуется вычислить продолжительность данного события в часах и минутах. Задача элементарная, но есть доп. условие. Продолжительность события нужно вычислять только учитывая разрешенные промежутки времени, например: Понедельник с 8:00 до 17:00 Вторник с 8:00 до 17:00 .... Пятница с 8:00 до 17:00 Пример: Начало события 29.10.04 15:00 (пятница), окончание 01.11.04 9:30 (понедельник) Продолжительность должна быть 3 часа 30 минут. Кто-нибудь предложите красивые решения. Формат хранения данных не важен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2004, 14:08 |
|
||
|
Задача по определению интервала времени
|
|||
|---|---|---|---|
|
#18+
(Просто для собственной разминки мозгов, от делать нефиг) Я бы наверное так сделал: Нужны классы "Событие", "РасписаниеНедели", "РасписаниеДня", "ПродолжительностьСобытия" и класс-утилиту "ДеньНедели". Ответственность последнего - по дате определить день недели (вроде бы стандартные средства для этого есть, но всё равно сделал бы класс-оболочку для удобства). Класс "РасписаниеНедели" содержит пары день недели - "РасписаниеДня" (доступ к расписанию дня осуществляется через день недели) и метод для вычисления продолжительности события согласно расписания недели (на входе "Событие" на выходе "ПродолжитеьностьСобытия"). У "РасписанияДня" есть такой же метод (на входе "Событие" на выходе ПродолжитеьностьСобытия"). Для класса "ПрдолжительностьСобытия" определён метод суммирования с однотипными объектами. Тогда порядок работы будет примерно следующий: 1. Для события определяем день начала и день конца. 2. Для всех объектов "РасписаниеДня" попавших в интервал от дня начала до дня конца (включая границы) вызываем метод вычисления продолжительности и суммируем результат. Ограничения: продолжительность событий не может быть больше недели (я так понял, что так и есть) т.е. примерно так: Код: plaintext 1. 2. 3. 4. 5. в методе WeekScheledue.calculateLength(Event e): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Ну, в общем, так вот... в первом приближении... некоторая доработка понадобиться, конечно, ну да уже лень, и кушать охота, пошёл я домой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2004, 18:35 |
|
||
|
Задача по определению интервала времени
|
|||
|---|---|---|---|
|
#18+
to SOMNAMBULA: Спасибо за идеи. У меня было нечто похожее, но в более кривом варианте. Кстати продолжительность события может быть теоретически неограниченной, а практически до 6-8 месяцев. Еще один нюанс, расписание дня тоже может включать теоретически неограниченное число интервалов, например, с 8:00 до 12:00 и с 13:00 до 17:00. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 09:11 |
|
||
|
Задача по определению интервала времени
|
|||
|---|---|---|---|
|
#18+
А никто не сталкивался, кстати, с численными алгоритмами решения подобных задач? Например, что-то типа того, что данные расписания хранятся числом, например, Double и путем каких либо махинаций математических получить число, которое после преобразоваий и даст нужную продолжительность. Криво описал, надеюсь понятно, что я имел ввиду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 09:15 |
|
||
|
Задача по определению интервала времени
|
|||
|---|---|---|---|
|
#18+
Численно, конечно, можно решить. Но я бы не стал, если конечно я не студент факультета прикладной математики и это не лабораборная работа :-). Только вот численное решение - это не значит, что следует выражаться в числах (если речь идёт о численных методах). Так или иначе все данные - это числа. По любому надо стараться манипулировать абстракциями на языке предметной области. К стати, приведённый образец кода никак не изменится, если даже события состоят из "кусков" времени и дневное расписание так же кусочно. Вся эта логика д/б инкапсулиравана в реализации классов. Если такие протяжённые события, то стоит подумать о том, что и расписание переменно за такой период времени, да и в днях недели расписание может быть разным. Т.е. можно подключить источник данных, что бы хранить расписания и события и извлекать их для обработки. Токо вот надо ли это? Что за задача такая странная ставиться? Если она разовая, ну нафиг парится, кривой там код не кривой - раз исползовали и забыли, игра не стоит свечь. Как то это навеевает управлением проектами..., а если так, что ж не взглянуть на готовые средства, например, MS Project. Там много чего полезного в этой области есть. К стати, если посмотерь на MS Project, так сказать, то хорошее решение может прийти само сабой, ну, это на мой взгляд. Можно, конечно, все данные хранить в числах (как я уже сказал, они так или иначе числа), например, начало каждого события и интервала в расписании в минутах от Рождества Христова :-), только вот зачем велосипед изобретать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 12:49 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2153525]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
92ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 444ms |

| 0 / 0 |
