Текущий архив: 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