Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-70495
Doom
2003-05-01 10:55
2003.05.22
Помогите разобраться с ошибкой в Windows 2000 !!!


14-70453
aga
2003-05-01 16:59
2003.05.22
Ftp-server


4-70575
new2
2003-03-22 04:41
2003.05.22
Изменение размеров формы


1-70336
exo
2003-05-08 22:02
2003.05.22
FindFirstChangeNotification


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский