![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как суммировать время? [D6, Win2k]
Relaxxx © (2005-08-10 16:52:00)Тоесть есть две стринговые переменные
t1:='8:56';
t2:='12:58';
как ети переменные две суммировать правельно??
Relaxxx (2005-08-11 15:31:00) [1]вот как сделал я:
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;
begin...end (2005-08-10 19:24:00) [2]> Relaxxx (10.08.05 18:36) [27]
В таком случае остаётся ручной разбор строки.
Anatoly Podgoretsky (2005-08-10 19:09:00) [3]Alexander Panov © (10.08.05 17:48) [25]
Не надо в сутках, достаточно умножить на количество часов в сутках. Форматирование вывода конечно не стандартное.
Например
Hours := Trunc(Time * 24)
Relaxxx (2005-08-10 18:36:00) [4]Вот появилась роблема, везде вы используете StrToTime,
но если у меня непример одно значение переменной больше чем 24 часа компилятор ругается, говорит что это не время!
Relaxxx (2005-08-10 18:19:00) [5]Всем спасибо!
Alexander Panov (2005-08-10 17:48:00) [6]Anatoly Podgoretsky © (10.08.05 17:41) [23]
Надоело напоминать про школьную математику, но в сутках 24 часа, остается вспомнить, что такое умножение.
Да не надо ему пересчет в сутки, автору в часах надо посчитать.
Alexander Panov (2005-08-10 17:48:00) [7]Пример разбора строки на часы, минут есть в http://www.delphimaster.ru/cgi-bin/forum.pl?id=1123366404&n=18
Остальное-простая арифметика.
Anatoly Podgoretsky (2005-08-10 17:41:00) [8]Надоело напоминать про школьную математику, но в сутках 24 часа, остается вспомнить, что такое умножение.
begin...end (2005-08-10 17:30:00) [9]Удалено модератором
Antonn (2005-08-10 17:28:00) [10]Удалено модератором
Tonich (2005-08-10 17:27:00) [11]
> Digitman © (10.08.05 17:24) [16]
да туда кикие переменные не постявь ответ будет сложение двух дат а вслучае t3>24 часа t3 := t3-24 часа тоесть
число часов минут и секунд с учетом перехода через полноч
begin...end (2005-08-10 17:27:00) [12]К [17]:
uses DateUtils.
Antonn (2005-08-10 17:26:00) [13]Так-с, учитываем нолики:
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:26:00) [14]
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.
Digitman (2005-08-10 17:24:00) [15]
> Tonich © (10.08.05 17:21) [14]
ну если буквально про "ети переменные", то твое решение вполне резонно)
Tonich (2005-08-10 17:22:00) [16]можно и так
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;
будет то что он хотел ) как мне кажется
Tonich (2005-08-10 17:21:00) [17]
> ОНО ли ему надо ?
так погодь
> '00:00:00'
получится в том случаи который написал я
да и он сам сказал что
> нужно получить просто количество часов(никаки суток)
вот это он и получит помоему )) разве нет?:)
Digitman (2005-08-10 17:19:00) [18]
> Tonich © (10.08.05 17:12) [11]
и получит автор
'00:00:00'
ОНО ли ему надо ?
Antonn (2005-08-10 17:19:00) [19]И-и-и-и-Ха-а-а :))))
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');
ЗЫ Сильно не ругайтесь:)
Tonich (2005-08-10 17:12:00) [20]
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;