Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.30;
Скачать: CL | DM;

Вниз

Вычисления с TDateTime   Найти похожие ветки 

 
NightCon   (2002-09-19 13:10) [0]

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


 
Skywalker ©   (2002-09-19 13:18) [1]

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


 
lenin ©   (2002-09-19 13:20) [2]


> NightCon (19.09.02 13:10)

Надо делать свой календарь, в котором будут указаны все праздник, выходные, ...


 
NightCon   (2002-09-19 13:20) [3]

и как ты себе это представляешь?


 
qube ©   (2002-09-19 13:24) [4]

да как угодно.

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

Можно реализовать класс -- множество дат, которые являются выходными.


 
lenin ©   (2002-09-19 13:26) [5]


> NightCon (19.09.02 13:20)

Делаешь таблицу, в каторой указываешь все выходные, праздники, ... Вычесляешь количество дней между двумя датами. Перебераешь таблицу, и проверяешь попдает дата в промежуток, или нет. Если поподает, то из количества дней отнимаешь один. Оставшиеся дни умнажаешь на 8, вот и все.
Но это только так, примерно.


 
Separator ©   (2002-09-19 13:30) [6]

Я бы на твоем месте сделал так:
{Date1>Date2, Uses -> TimeUtil}
PrazdnikHours:= //Количество праздничных часов
RabHours:= trunc(TDateTimeToCTime(Date2-Date1)/3600)-PrazdnikHours;


 
qube ©   (2002-09-19 13:33) [7]

PrazdnikHours откуда возьмешь?


 
Separator ©   (2002-09-19 13:34) [8]

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


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


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

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


 
Separator ©   (2002-09-19 13:39) [10]

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


 
Anatoly Podgoretsky ©   (2002-09-19 13:41) [11]

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


 
qube ©   (2002-09-19 13:43) [12]


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

и я о том же


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

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


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


> Separator © (19.09.02 13:45)

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


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

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


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

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


 
Separator ©   (2002-09-19 13:54) [17]

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


 
qube ©   (2002-09-19 13:54) [18]

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


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

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


 
Separator ©   (2002-09-19 13:57) [20]

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


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

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


 
Separator ©   (2002-09-19 14:09) [22]

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


 
Separator ©   (2002-09-19 14:13) [23]

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;


 
qube ©   (2002-09-19 14:21) [24]

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


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

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


 
lenin ©   (2002-09-19 14:27) [26]


> qube © (19.09.02 14:21)

TDateTime = type Double;


> NightCon (19.09.02 14:22)

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


 
qube ©   (2002-09-19 14:33) [27]

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



Страницы: 1 вся ветка

Текущий архив: 2002.09.30;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.017 c
14-98335
Aga
2002-09-05 16:41
2002.09.30
ярлыки


14-98346
SPeller
2002-09-05 06:23
2002.09.30
Халява


8-98224
Bumo$
2002-05-31 17:25
2002.09.30
Как управлять изображением?


4-98407
EternalWonderer
2002-08-15 12:01
2002.09.30
Передача в CreateThread функции с параметрами


14-98269
Esu
2002-09-03 13:57
2002.09.30
.NET forever ;)