powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Задача по определению интервала времени
5 сообщений из 5, страница 1 из 1
Задача по определению интервала времени
    #32759232
GMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть некое событие, работа, которое характеризуется
- датой и временем начала
- датой и временем окончания
Требуется вычислить продолжительность данного события в часах и минутах.

Задача элементарная, но есть доп. условие. Продолжительность события нужно вычислять только учитывая разрешенные промежутки времени, например:
Понедельник с 8:00 до 17:00
Вторник с 8:00 до 17:00
....
Пятница с 8:00 до 17:00

Пример: Начало события 29.10.04 15:00 (пятница), окончание 01.11.04 9:30 (понедельник)
Продолжительность должна быть 3 часа 30 минут.

Кто-нибудь предложите красивые решения.
Формат хранения данных не важен.
...
Рейтинг: 0 / 0
Задача по определению интервала времени
    #32760027
SOMNAMBULA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(Просто для собственной разминки мозгов, от делать нефиг)

Я бы наверное так сделал:

Нужны классы "Событие", "РасписаниеНедели", "РасписаниеДня", "ПродолжительностьСобытия" и класс-утилиту "ДеньНедели". Ответственность последнего - по дате определить день недели (вроде бы стандартные средства для этого есть, но всё равно сделал бы класс-оболочку для удобства).

Класс "РасписаниеНедели" содержит пары день недели - "РасписаниеДня" (доступ к расписанию дня осуществляется через день недели) и метод для вычисления продолжительности события согласно расписания недели (на входе "Событие" на выходе "ПродолжитеьностьСобытия").

У "РасписанияДня" есть такой же метод (на входе "Событие" на выходе
ПродолжитеьностьСобытия").

Для класса "ПрдолжительностьСобытия" определён метод суммирования с однотипными объектами.

Тогда порядок работы будет примерно следующий:

1. Для события определяем день начала и день конца.
2. Для всех объектов "РасписаниеДня" попавших в интервал от дня начала до дня конца (включая границы) вызываем метод вычисления продолжительности и суммируем результат.

Ограничения: продолжительность событий не может быть больше недели (я так понял, что так и есть)

т.е. примерно так:

Код: plaintext
1.
2.
3.
4.
5.
...
Event e = selectTargetEvent(); // получение события, продолжительность которого надо вычислить

WeekScheledue ws = new WeekScheledue(); // расписание недели
EventLength length = ws.calculateLength(e); // вычисляем продолжительность события по расписанию недели
...

в методе WeekScheledue.calculateLength(Event e):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Day firstDay = e.begin(); // определяем день недели начала события
Day lastDay = e.end(); // определяем день недели конца события
EventLength el = new EventLength(0); // продолжительность события "нулевой длины"

Iterator dayIterator = createIterator(firstDay, lastDay);

while(dayIterator.hasNext()) {
	DayScheledue d = (DayScheledue)dayIterator.next(); // получение расписание для определённого дня
	el = el.addLength(d.calculateLength(e));
}

return el;

Ну, в общем, так вот... в первом приближении...
некоторая доработка понадобиться, конечно, ну да уже лень, и кушать охота, пошёл я домой
...
Рейтинг: 0 / 0
Задача по определению интервала времени
    #32760383
GMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to SOMNAMBULA:

Спасибо за идеи. У меня было нечто похожее, но в более кривом варианте.
Кстати продолжительность события может быть теоретически неограниченной, а практически до 6-8 месяцев.
Еще один нюанс, расписание дня тоже может включать теоретически неограниченное число интервалов, например, с 8:00 до 12:00 и с 13:00 до 17:00.
...
Рейтинг: 0 / 0
Задача по определению интервала времени
    #32760385
GMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А никто не сталкивался, кстати, с численными алгоритмами решения подобных задач?
Например, что-то типа того, что данные расписания хранятся числом, например, Double и путем каких либо махинаций математических получить число, которое после преобразоваий и даст нужную продолжительность.

Криво описал, надеюсь понятно, что я имел ввиду?
...
Рейтинг: 0 / 0
Задача по определению интервала времени
    #32760875
SOMNAMBULA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Численно, конечно, можно решить. Но я бы не стал, если конечно я не студент факультета прикладной математики и это не лабораборная работа :-). Только вот численное решение - это не значит, что следует выражаться в числах (если речь идёт о численных методах). Так или иначе все данные - это числа. По любому надо стараться манипулировать абстракциями на языке предметной области.
К стати, приведённый образец кода никак не изменится, если даже события состоят из "кусков" времени и дневное расписание так же кусочно. Вся эта логика д/б инкапсулиравана в реализации классов.
Если такие протяжённые события, то стоит подумать о том, что и расписание переменно за такой период времени, да и в днях недели расписание может быть разным. Т.е. можно подключить источник данных, что бы хранить расписания и события и извлекать их для обработки.
Токо вот надо ли это? Что за задача такая странная ставиться? Если она разовая, ну нафиг парится, кривой там код не кривой - раз исползовали и забыли, игра не стоит свечь.
Как то это навеевает управлением проектами..., а если так, что ж не взглянуть на готовые средства, например, MS Project. Там много чего полезного в этой области есть. К стати, если посмотерь на MS Project, так сказать, то хорошее решение может прийти само сабой, ну, это на мой взгляд.

Можно, конечно, все данные хранить в числах (как я уже сказал, они так или иначе числа), например, начало каждого события и интервала в расписании в минутах от Рождества Христова :-), только вот зачем велосипед изобретать?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Задача по определению интервала времени
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]