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

Вниз

Как произвести обсчет?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.019 c
14-70445
4you
2003-05-02 11:04
2003.05.22
Новые библиотеки


3-70138
jen_bond
2003-04-30 17:27
2003.05.22
Перевод из нижнего регистра в верхний.


3-70111
Sergey
2003-04-28 13:54
2003.05.22
Midas событие ReconcileError ?


1-70364
Денчез
2003-05-09 20:42
2003.05.22
Как сделать так чтобы окошко появлялось плавно(прелоадер в 3DMark


14-70498
Mike_666
2003-05-03 02:23
2003.05.22
C#