Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вычисления с TDateTime [D6, Win2k]


Страницы:   1 2

NightCon ©   (2002-09-19 13:10:00) 

Такая вот проблемка: нужно вычислить кол-во рабочих часов в периоде, заданном в двух TDateTime, но всю малину портит то, что при этом нужно учитывать, что в смене 8 часов, и еще есть праздники, рабочие выходные и т.д.


qube   (2002-09-19 14:33:00) [1]

Во-во, таблица БД -- это уже хорошая реализация множества.
А вообще в недавно вышедшей книженции Ахо, Ульмана и Хопкрофта оч. хорошо написано, как множества реализовывать, чтобы пользоваться было удобно и эффективно.


lenin   (2002-09-19 14:27:00) [2]


> qube © (19.09.02 14:21)

TDateTime = type Double;


> NightCon (19.09.02 14:22)

Любыми. Можешь использовать текстовые файлы, БД,... Как тебе удобнее


NightCon   (2002-09-19 14:22:00) [3]

с этим вроде ясно, а как вводить даты с выходными в множество?
Это нужно делать раз в год но какими средствами/компонентами?


qube   (2002-09-19 14:21:00) [4]

Мне почему-то кажется, что TDateTime -- это не ordinal тип, и встроенным типом множества пользоваться нельзя, надо свой писать. Могу ошибаться.


Separator   (2002-09-19 14:13:00) [5]

var
NeRabDay: set of TDateTime = [.......];
Prostoi: integer = ...;

functinon (date1, date2: TDateTime): cardinal;
var
Res, i, k: cardinal;
begin
k:= 0;
for i:= trunc(Date1) to trunc(Date2) do {Date1<Date2}
if not (i in NRabDay) then
Inc(k);
K:= (K)*8-Prostoi
end;


Separator   (2002-09-19 14:09:00) [6]

Конкретно поясни что нужно?


NightCon   (2002-09-19 14:01:00) [7]

С рабочими было бы проще, но мне надо учитывать простой оборудования именно в рабочих часах. Т.е. пазванили - вызвали - пошло время простоя, запустили - простой кончился. А вторая таблица именно для рабочих выходных, если обычные выходные считать через DayOfWeek().


Separator   (2002-09-19 13:57:00) [8]

В общем так нужно:
1. множество нерабочих дней
2. количество пропущеных дней рабочим (по любым причинам)
3. и все, остальное считать


Anatoly Podgoretsky   (2002-09-19 13:55:00) [9]

Зачем две то, одной что ли не хватает, а считать например
ReadLn(F, a[i])


qube   (2002-09-19 13:54:00) [10]

зачем 2?
зачем различать выходные и праздники?
задаешь множество нерабочих дней, и все.


Separator   (2002-09-19 13:54:00) [11]

Тогда вообще надо задават на каждого рабочего таблицу, так как надо еще учесть больничные дни, отгулы и все такое


NightCon   (2002-09-19 13:52:00) [12]

вообще-то можно хранить несколько таблиц (две) одна с праздниками, а другая с рабочими выходными... но как это все считать?


Андрей Прокофьев   (2002-09-19 13:51:00) [13]

Возможны переносы выходных и проч.
Причем, на каждом предприятии это может происходить по-разному
Без таблицы и ее корректировки не обойтись.


lenin   (2002-09-19 13:48:00) [14]


> Separator © (19.09.02 13:45)

Это бутет не совсем верно. Ведь рабочий день может быть и в субботу и в воскресенье. Выходные также надо задовать, как и праздники.


Separator   (2002-09-19 13:45:00) [15]

Выходные можно вычислисть с помощью DayOfWeek()


qube   (2002-09-19 13:43:00) [16]


> qube © (19.09.02 13:24)
> да как угодно.
>
> праздники, выходные вычислить нельзя -- их нужно задавать
> (из файла грузить, например).

и я о том же


Anatoly Podgoretsky   (2002-09-19 13:41:00) [17]

А как ты иначе представляешь, на основании чего считать тот мли иной день праздничным, да и с выходными не все чисто


Separator   (2002-09-19 13:39:00) [18]

Ага, пока других решений не вижу, это самое оптимальное


qube   (2002-09-19 13:36:00) [19]


> Вычислить надо

т.е. проблема остается. без календаря -- никуда.


Separator   (2002-09-19 13:34:00) [20]

> qube
Вычислить надо


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо