Вопрос № 19446: Здравствуйте уважаемые эксперты!
Возник следующий вопрос:
Имеются два времени в формате hh:mm:ss, например первое: 14:34:12 и второе 16:32:55, причём второе время всегда больше первого (первое время начало "сессии", второе конец). В...
Вопрос № 19446
Здравствуйте уважаемые эксперты!
Возник следующий вопрос:
Имеются два времени в формате hh:mm:ss, например первое: 14:34:12 и второе 16:32:55, причём второе время всегда больше первого (первое время начало "сессии", второе конец). Вопрос в следующем: как получить разность этого времени в формате hh:mm:ss или в формате X часов Y минут Z секунд?
Надеюсь на вашу помощь.
Отправлен: 09.04.2005, 21:57
Вопрос задал: Подковырин Андрей Вадимович (статус: Посетитель)
Всего ответов отправлено: 7
Ответ отправил: Bochvarov NikB (статус: 2-ой класс)
Отправлен: 09.04.2005, 23:23
Отвечает: John Freeman
Здравствуйте, Подковырин Андрей Вадимович!
1) Tdatetime1-TDateTime2 - это число
2) DatetimeToStr
3) Обрезать то что вышло из п2
Ответ отправил: John Freeman (статус: Профессионал)
Отправлен: 10.04.2005, 00:56
Отвечает: Malish
Здравствуйте, Подковырин Андрей Вадимович!
Вопрос не дозадан!!!
Я понял что у тебя есть время , и ты его получил с программы , когда прописывал код типа
var
A,B,C : TDateTime;
//Что-то творится
begin
A:=Now;
Edit1.Text := FormatDateTime('hh:nn:ss',A);
end;
//что-то творится
begin
B:=Now;
Edit2.Text := FormatDateTime('hh:nn:ss',B);
end;
//если так то проще некуда
begin
C := B-A;
Edit3.Text := FormatDateTime('hh:nn:ss',C);
end;
Если я понял правильно то вот решение.
Вот вариант когда есть строки 14:34:12 типа string в которых время
C,D,E : TDateTime;
AA,BB,CC : string;
begin
D:=StrToDateTime(AA); //Из строки во время
Edit1.Text := FormatDateTime('hh:nn:ss',D);
E:=StrToDateTime(BB);
Edit2.Text := FormatDateTime('hh:nn:ss',E);
CC:= FormatDateTime('hh:nn:ss',D-E);
Edit3.Text := CC;
end;
Запусти проги и сразу поймешь что тебе надо из этого!
Если что непонятно пиши.
Ответ отправил: Malish (статус: 9-ый класс)
Отправлен: 10.04.2005, 01:11
Отвечает: corsar
Здравствуйте, Подковырин Андрей Вадимович!
Вариант 1.
st1,st2 : string; //Время 1 и 2 - строки
h1,m1,s1 : integer; //первое время
h2,m2,s2 : integer; //второе
x,y,z : integer; //разница
.......
//Преобразуем время-строку в часы, минуты, секунды
h1:=StrToInt(Copy(st1,1,2));
m1:=StrToInt(Copy(st1,4,2));
s1:=StrToInt(Copy(st1,7,2));
h2:=StrToInt(Copy(st2,1,2));
m2:=StrToInt(Copy(st2,4,2));
s2:=StrToInt(Copy(st2,7,2));
x:=h2-h1; //Разница часов
//Разница минут
if m2>=m1 then y:=m2-m1 else
begin
x:=x-1;
y:=60-m1+m2;
end;
//Разница секунд
if s2>=s1 then z:=s2-s1 else
begin
y:=y-1;
z:=60-s1+s2;
end;
//На выходе разница в формате x:y:z
Вариант 2.
st1,st2,st : string; //Время 1 и 2 - строки
T1,T2,T : TDateTime;
.........
T1:=StrToTime(st1);
T2:=StrToTime(st2);
T:=T2-T1;//Разница
st:=TimeToStr(T); //строка - разность времени
TDateTime - стандартный тип Delphi для даты и времени. По сути является просто Real, поэтому с ним можно работать обычными арифмитическими операциями. В данном случае это
вычитание.
функции для работы с типом:
Date - текущая дата
Time - текущее время
//Функции разбиения(формирования) даты/времени на(из) комоненты(ов)
DecodeDate
DecodeTime
EncodeDate
EncodeTime
//Преобразования дата/время <-> строка
DateToStr
TimeToStr
StrToDate
StrToTime
Ответ отправил: corsar (статус: 1-ый класс)
Отправлен: 10.04.2005, 14:01
Отвечает: Boriss
Здравствуйте, Подковырин Андрей Вадимович! И еще упомяну модуль DateUtils - в нем дофига всего. Вот, например, смотри группу в приложении
Приложение:
Ответ отправил: Boriss (статус: Профессор)
Отправлен: 11.04.2005, 17:29
Отвечает: sir henry
Здравствуйте, Подковырин Андрей Вадимович!
А время то это в каком формате? Что же Вы сомое главное не написали? :)
Если строковое, сто надо написать функцию разбора этой строки, выделить из нее числа и вычитать одно из другого с учетом переноса.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 12.04.2005, 05:38
Отвечает: Полховский Александр Владимирович
Здравствуйте, Подковырин Андрей Вадимович!
Разбить на 3 строчки функциями ansileftstr, ansirightstr и AnsiMidStr, перевести каждую в число функцией strtoint, посчитать(соответственно, ввести условие, когда число из второго времени меньше числа из первого), перевести обратно функцией inttostr, собрать в 1 строку оператором +. Edit1- первое время, Edit2 - второе.