2012-05-30 3 views
2

Мне нужно взять период времени, например. в течение недели, а затем дальше вниз в часы, 30 минут, 15 минут и т. д.Наиболее эффективный способ представления периодов времени

Затем я хочу иметь возможность назначать (возможно, несколько) людей для этих временных интервалов.

например.

30 мая 2012

0700: 0730 - Алиса, Боб

0730: 0800 - Алиса

....: ....

1930: 2000 - Алиса

31 мая 2012 года

0700: 0730 - Carol

0730: 0800 - Carol

....: ....

1930: 2000 - Carol

Где время начала и время окончания каждого дня можно настроить.

Мне нужно уметь сортировать рабочие периоды и запрашивать их, чтобы узнать, нет ли у них назначенного им лица. Проверьте день/неделю, на которые никто не назначается на> х часов.

Я знаю .Net имеет TimeSpan и DateTime, но они кажутся громоздкими для использования, поскольку это похоже на простое представление некоторых данных, а TimeSpan не имеет StartTime, это всего лишь промежуток времени (например, 30 минут, 5 минут , 1 час и т. Д.).

Первоначально я имел в виду создание класса WorkingDay, у WorkDay может быть несколько рабочих элементов. WorkPeriod имеет StartTime и EndTime и список людей, назначенных этому WorkingPeriod, с помощью простых методов для AddPerson и RemovePerson.

WorkingDay будет иметь функцию, чтобы получить список людей, назначенных на этот день, запустив WorkPeriods и вытащив всех уникальных людей, которые назначены на любой период. Он также будет иметь функцию, которая вытаскивает все рабочие элементы с назначенным пользователем.

Это кажется слишком громоздким, хотя! Тем более, что мне понадобится еще что-то, что занимает несколько рабочих дней и проверяет, что общее время, которое кто-то назначает за несколько дней, меньше, чем х часов и т. Д.

Любые предложения по хорошей структуре для этого? Является ли их существующей структурой .Net, которая обеспечит это, чего я не хватает?

ответ

5

Наиболее прямым (и компактным) представлением для временного интервала является DateTime start, TimeSpan duration.

Это хорошо подходит для запросов, менее подходит для настройки и проверки (против перекрытия и т. Д.).

Следующая опция состоит в том, чтобы разделить каждый день (или неделю) на фиксированное количество периодов, определить эти периоды один раз и указать каждый временной интервал как DateTime base, int PeriodId. Лучше для поиска пустых и дубликатов.

+0

Вы даже можете поместить это в struct/class и определить некоторые операторы на нем. – fero

+0

@fero - Да, конечно. Подобно 'DateTime EndTime {get {return Start + Duration; }} ' –

Смежные вопросы