Форум: "Базы";
Текущий архив: 2003.05.22;
Скачать: [xml.tar.bz2];
ВнизКак произвести обсчет? Найти похожие ветки
← →
romario (2003-04-29 10:20) [0]Помогите пожалуйста!
У меня есть таблица (Paradox) в которой поля заполнены TTime когда пытаюсь просуммировать значение полей по достижении 23часов 59 мин 59 сек счет начинается с нуля, а мне необходимо узнать суммарное время!
Заранее благодарен!
← →
Соловьев (2003-04-29 10:26) [1]а если привести к DateTime? и после сумирования перевести количество и дней(месяцев, лет) в время?
← →
GLUKAS (2003-04-29 10:33) [2]Ничего в голову не приходит кроме как:
var h,m,s:integer;
d:tdatetime;
begin
h:=0;
m:=0;
s:=0;
while not table.eof do
begin
d:=tabletime.asDatetime;
h:=h+HoursOf(d);
m:=m+MinuteOf(d);
s:=s+SecondsOf(d);
end;
m:=m+(s div 60);
s:= s-(s div 60)*60;
h:=h+(m div 60);
m:= m-(m div 60)*60;
Caption:="Часов:"+inttostr(h)+" Минут:"+inttostr(m)+ "Секунд:"+inttostr(s);
end;
← →
Zacho (2003-04-29 10:39) [3]Имхо, изначально неправильно спроектирована БД. Что надо хранить ? Метку времени (корявый термин, но что-то не могу сообразить, как это по-нормальному назвать) т.е. время, в которое произошло какое-либо событие, или количество времени ? Если первое, то значение больше 23.59.59 смысла не имеет. Да и суммировать их вообще смысла не имеет. Если второе, то хранить надо, например в integer количество секунд (или минут, часов и т.п. - зависит от задачи) а после суммирования переводить в нужные единицы (часы, дни, ...)
← →
romario (2003-04-29 16:11) [4]to GLUKAS
Спасибо за совет, но не проходит HoursOf и т.д. не понимает!
to Zacho
вот и вопрос как перевести все это число в секунды!
← →
MsGuns (2003-04-29 16:19) [5]Судя по всему, есть события, каждому из которых соответствует запись в БД. У события есть "Время" его возникновения (фиксации) и, видимо, нужно подсчитать период (разницу времен) между самым ранним и самым поздним событием в некотором их подмножестве. В это случае прав Zacho © (29.04.03 10:39), подозревающий, что структура БД не совсем правильно спроектирована под это дело. Т.е. в пределах суток оно еще бы работало, в противном же случае надо иметь не Time, а DateTime, а если его нет, а есть только Date + Time, то надо сделать выборку в пределах дат, преобразовывать время в "абсолютный" вид и потом уже делать вычисления или фильтации-выборки.
← →
romario (2003-04-29 16:27) [6]to MsGuns
на самом деле это время - время нахождения на работе того или иного человека, в конце месяца требуется подсчитать общее количество времени присутствия на работе!
Каждый день есть время входа и выхода.....в таблице есть поле SumTime - то есть общего времени присутствия вот это поле и надо складывать!
← →
Соловьев (2003-04-29 16:27) [7]
> romario © (29.04.03 16:11)
Преобразовываем Time в DateTime получим дату + время, потом увеличивает эту это значение прибавив время и так далее. Потом преобразовать 3 дня 12 часов часы, секунды я думаю будет не сложно..
← →
MsGuns (2003-04-29 16:39) [8]Не понятно абсолютно. Если это ПРОДОЛЖИТЕЛЬНОСТЬ нахождения на службе, например, для учета рабочего времени для расчета з/пл, то оно определяется в ЧАСАХ, при необходимостью с дробью. Если же длительность раб.дня определяется как разница между "пришел" и "ушел", то следует его и считать при вводе инф-ции в БД опять же в часах " или" минутах, но никик не " и"
← →
romario (2003-04-29 16:50) [9]Вот именно "и" потому что требуется в конечном итоге получить сумму времени присутствия человека на работе в течении какого-то периода времени....
И вот при складывании этих времен и выходит что доходя до 23:59:59 начинается счет заново....
Проблема в том что это моя первая программа и я слишком мало знаю, поэтому и обращаюсь за помощью!
← →
Соловьев (2003-04-29 16:51) [10]
> до 23:59:59 начинается счет заново....
не заново будет если у тебя тип будет DateTime... Будет следующая дата + время.
← →
stone (2003-04-29 16:54) [11]Возможно тебе поможет
DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word);
и другие подобные функции.
← →
MsGuns (2003-04-29 17:08) [12]Неплохо было бы сообщим честному народу, а НА ФИГА И КОМУ ЭТО НАДО ? В смысле, дирекции, ОК, бухгалтерии, начальнику ВОХРа, дворнику, собаке дворника ?
← →
MsGuns (2003-04-29 17:14) [13]>romario © (29.04.03 16:27)
>на самом деле это время - время нахождения на работе того или иного человека, в конце месяца требуется подсчитать общее количество времени присутствия на работе!
Каждый день есть время входа и выхода....
Ну ведь сказали уже: при вводе записи надо определять ДАТУ, ПРОДОЛЖИТЕЛЬНОСТЬ в минутах в ЭТИХ СУТКАХ. А дальше ты работаешь уже не с Time и не с DateTime, а с простым Integer, которое суммируещь и сравниваешь с ФОНДОМ РАБОЧЕГО ВРЕМЕНИ ПО ГРАФИКУ ПРЕДПРИЯТИЯ. Если не знаешь, что это такое, побеседуй с кем-нибуть из планового отдела, ОТиЗа или бухгалтерии - в общем, с теми, кому надо твое "произведение".
← →
GLUKAS (2003-04-30 07:26) [14]>to romario
8) Они хранятся в библиотеке DateUtils....
Там еще много чего интересного....
← →
Zacho (2003-04-30 07:55) [15]
> romario © (29.04.03 16:27)
Вот в этом поле SumTime и надо хранить время (то есть разницу между временем прихода и временем ухода) в integer - это будет кол-во часов (или минут, смотря что тебе надо). После суммирования можно получить из результата количество дней, часов, минут и при необходимости преобразовать в TDateTime.
Пример: получили кол-во времени за определенный период в минутах. Тогда, из этого:
Дни:=ВРЕМЯ div 1440
Часы:=(ВРЕМЯ mod 1440) div 60
Минуты:=((ВРЕМЯ mod 1440) mod 60) mod 60
← →
Zacho (2003-04-30 08:00) [16]
> Zacho © (30.04.03 07:55)
Ой, блин ! Ошибочка вышла :-(
Минуты:=(ВРЕМЯ mod 1440) mod 60
← →
romario (2003-04-30 09:54) [17]> Zacho ©
спасибо за помощь !
Все получилось!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.05.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c