Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.011 c
3-1123565477
Shopot
2005-08-09 09:31
2005.09.18
ADO Query и SQL Server. Проблемы с памятью.


3-1123139791
Ирина
2005-08-04 11:16
2005.09.18
Запрос по полю


1-1124887085
Sidex
2005-08-24 16:38
2005.09.18
Как интегрировать программу с оболочкой Windows?


14-1124453310
_Lex_
2005-08-19 16:08
2005.09.18
Новосибирск MP


14-1124362233
Andy BitOff
2005-08-18 14:50
2005.09.18
Помогите найти мр3 шку





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский