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

Вниз

Как суммировать время?   Найти похожие ветки 

 
Relaxxx   (2005-08-10 16:52) [0]

Тоесть есть две стринговые переменные
t1:="8:56";
t2:="12:58";

как ети переменные две суммировать правельно??


 
begin...end ©   (2005-08-10 16:54) [1]

Укажите правила, по которым должно производиться правильное суммирование. Например, чему должна быть равна сумма "9:00" и "20:00"?


 
Relaxxx   (2005-08-10 16:56) [2]

как это сделать?


 
Tonich ©   (2005-08-10 16:56) [3]

ну я бы сначада перевел их в TdateTime


var
tt1,tt2:Tdatetime;
tt1:=EncodeTime(...)
tt2:=EncodeTime(...)


а потом уж....

может кто предложит и другое)


 
begin...end ©   (2005-08-10 16:57) [4]

> Relaxxx   (10.08.05 16:56) [2]

Ответьте на вопрос из [1].


 
Relaxxx   (2005-08-10 17:00) [5]

извините непонял.
должна быть равна количеству часов и минут, в вашем случае
"29:00"


 
Relaxxx   (2005-08-10 17:02) [6]

всмысле минут в остатке, тоесть
"8:56"+"12:58"="21:54"


 
Tonich ©   (2005-08-10 17:02) [7]


> "29:00"
ух ты))) прикольно


 
Digitman ©   (2005-08-10 17:02) [8]


> Relaxxx   (10.08.05 16:56) [2]
> как это сделать?


про то что в земных сутках 24 часа слыхал ? ... о том и речь идет ..

то ли тебе в результате нужно получить
1 сутки: 5 часов: 0 минут: 0 секунд

то ли

29 часов: 0 минут: 0 секунд

одному Господу известно)


 
Relaxxx   (2005-08-10 17:04) [9]

я уже описал, мне нужно получить просто количество часов(никаки суток)


 
Anatoly Podgoretsky ©   (2005-08-10 17:11) [10]

В сутках 24 часа


 
Tonich ©   (2005-08-10 17:12) [11]


var
t1,t2,t3:TDateTime;
begin
t1 := EncodeTime(20,0,0,0);
t2 := EncodeTime(4,0,0,0);
t3 := t1+t2;
ShowMessage(FormatDateTime("hh:mm:ss",t3));
end;


 
Antonn ©   (2005-08-10 17:19) [12]

И-и-и-и-Ха-а-а :))))

function SumTime2string(time_1,time_2:string):string;
var _t1,_t2:Tdatetime; _sec_count:integer;
begin
_t1:=strtotime(time_1);
_t2:=strtotime(time_2);
_sec_count:=trunc( ((_t1-trunc(_t1))+(_t2-trunc(_t2)))*86400);
result:= inttostr(_sec_count div 3600)+":"+inttostr((_sec_count div 60) - (_sec_count div 3600)*60)+":"+inttostr(_sec_count - ((_sec_count div 60) - (_sec_count div 3600)*60)*60 - (_sec_count div 3600)*3600);
end;

Использование:
label1.caption:=SumTime2string("20:00","9:00");

ЗЫ Сильно не ругайтесь:)


 
Digitman ©   (2005-08-10 17:19) [13]


> Tonich ©   (10.08.05 17:12) [11]


и получит автор

"00:00:00"

ОНО ли ему надо ?


 
Tonich ©   (2005-08-10 17:21) [14]


> ОНО ли ему надо ?
так погодь

> "00:00:00"
получится в том случаи который написал я

да и он сам сказал что

> нужно получить просто количество часов(никаки суток)
вот это он и получит помоему )) разве нет?:)


 
Tonich ©   (2005-08-10 17:22) [15]

можно и так

var
t1,t2,t3:TDateTime;
begin
t1 := EncodeTime(8,56,0,0);
t2 := EncodeTime(12,58,0,0);
t3 := t1+t2;
ShowMessage(FormatDateTime("hh:mm:ss",t3));
end;

будет то что он хотел ) как мне кажется


 
Digitman ©   (2005-08-10 17:24) [16]


> Tonich ©   (10.08.05 17:21) [14]


ну если буквально про "ети переменные", то твое решение вполне резонно)


 
begin...end ©   (2005-08-10 17:26) [17]

var
 S1, S2, S: string;
 T1, T2, T: TDateTime;
 H: Word;
begin
 S1 := "8:56";
 S2 := "12:58";
 T1 := StrToTime(S1);
 T2 := StrToTime(S2);
 T := T1 + T2;
 H := HourOf(T);
 if HourOf(T1) + HourOf(T2) >= 24 then
   Inc(H, 24);
 S := Format("%d:%d", [H, MinuteOf(T)]);
 ShowMessage(S)
end.


 
Antonn ©   (2005-08-10 17:26) [18]

Так-с, учитываем нолики:
function SumTime2string(time_1,time_2:string):string;
var _t1,_t2:Tdatetime; _sec_count,_h,_m,_s:integer;
begin
_t1:=strtotime(time_1);
_t2:=strtotime(time_2);
_sec_count:=round( ((_t1-trunc(_t1))+(_t2-trunc(_t2)))*86400);
_h:=_sec_count div 3600;
_m:=(_sec_count div 60) - (_sec_count div 3600)*60;
_s:=_sec_count - ((_sec_count div 60) - (_sec_count div 3600)*60)*60 - (_sec_count div 3600)*3600;
result:="";
result:=inttostr(_h)+":";
if _m<10 then result:=result+"0";
result:=result+inttostr(_m)+":";
if _s<10 then result:=result+"0";
result:=result+inttostr(_s);
end;

Использовать как в [12]


 
begin...end ©   (2005-08-10 17:27) [19]

К [17]: uses DateUtils.


 
Tonich ©   (2005-08-10 17:27) [20]


> Digitman ©   (10.08.05 17:24) [16]
да туда кикие переменные не постявь ответ будет сложение двух дат а вслучае t3>24 часа t3 := t3-24 часа тоесть
число часов минут и секунд  с учетом перехода через полноч


 
Antonn ©   (2005-08-10 17:28) [21]

Удалено модератором


 
begin...end ©   (2005-08-10 17:30) [22]

Удалено модератором


 
Anatoly Podgoretsky ©   (2005-08-10 17:41) [23]

Надоело напоминать про школьную математику, но в сутках 24 часа, остается вспомнить, что такое умножение.


 
Alexander Panov ©   (2005-08-10 17:48) [24]

Пример разбора строки на часы, минут есть в http://delphimaster.net/view/2-1123366404/

Остальное-простая арифметика.


 
Alexander Panov ©   (2005-08-10 17:48) [25]

Anatoly Podgoretsky ©   (10.08.05 17:41) [23]
Надоело напоминать про школьную математику, но в сутках 24 часа, остается вспомнить, что такое умножение.


Да не надо ему пересчет в сутки, автору в часах надо посчитать.


 
Relaxxx   (2005-08-10 18:19) [26]

Всем спасибо!


 
Relaxxx   (2005-08-10 18:36) [27]

Вот появилась роблема, везде вы используете StrToTime,
но если у меня непример одно значение переменной больше чем 24 часа компилятор ругается, говорит что это не время!


 
Anatoly Podgoretsky ©   (2005-08-10 19:09) [28]

Alexander Panov ©   (10.08.05 17:48) [25]
Не надо в сутках, достаточно умножить на количество часов в сутках. Форматирование вывода конечно не стандартное.
Например

Hours := Trunc(Time * 24)


 
begin...end ©   (2005-08-10 19:24) [29]

> Relaxxx   (10.08.05 18:36) [27]

В таком случае остаётся ручной разбор строки.


 
Relaxxx   (2005-08-11 15:31) [30]

вот как сделал я:

function TOtchetsForm.SumTime(time1, time2:string):string;
var
 time1_hour, time1_minutes:integer;
 time2_hour, time2_minutes:integer;
 time_hour, time_minutes:integer;
begin
 time1_hour:=StrToInt(Copy(time1,1,Pos(":",time1)-1));
 time1_minutes:=StrToInt(Copy(time1,Pos(":",time1)+1,Length(time1)-Pos(":",time1)));

 time2_hour:=StrToInt(Copy(time2,1,Pos(":",time2)-1));
 time2_minutes:=StrToInt(Copy(time2,Pos(":",time2)+1,Length(time2)-Pos(":",time2)));

 time_hour:=time1_hour+time2_hour+((time1_minutes+time2_minutes) div 60);
 time_minutes:=(time1_minutes+time2_minutes) mod 60;

 result:=IntToStr(time_hour)+":"+IntToStr(time_minutes);
end;



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

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

Наверх




Память: 0.53 MB
Время: 0.043 c
4-1122371321
Slavyan
2005-07-26 13:48
2005.09.18
переключение шрифта


14-1124342604
Fresh123
2005-08-18 09:23
2005.09.18
Ср-ва разработки


3-1122028275
Carmen
2005-07-22 14:31
2005.09.18
Ограничение записей в базе Firebird


1-1124860816
root
2005-08-24 09:20
2005.09.18
Как определить установлен ли пакет MS Office


4-1122293419
rigid
2005-07-25 16:10
2005.09.18
проблема Win API?