Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как суммировать время? [D6, Win2k]


Страницы:   1 2

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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо