Текущий архив: 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.54 MB
Время: 0.167 c