![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вычитание времени [D6, XP]
Dr. Genius © (2008-10-04 11:05:00)Здравствуйте!
Как можно в Delphi вычесть время? То есть, чтобы при операции 12:10:00 минус 12:00:00 получался ответ = 10 минут (или 600 секунд).
korneley (2008-10-12 04:38:00) [1]
> {RASkov} © (04.10.08 12:39) [9]
> [8] + а время в делфи - это просто число.... вещественное.
> Точнее целая часть числа - это дата, а дробная - время.
Не... Всё число это кол-во суток, прошедших с. Никак не дата. Поэтому дробная часть - не время, а количество неполных суток. Это потом, умножив на тайно-шаманские числа (24 * 60 * 60), можно и до секунд, прошедших добраться.
Anatoly Podgoretsky (2008-10-11 22:52:00) [2]Да все в порядке, пока не вздумает целую часть преобразовать в строковое представление даты, тем более для интервалов менее 24 часов.
Johnmen (2008-10-11 22:38:00) [3]Вы чё, охренели получать интервал в виде даты????????????????
MsGuns (2008-10-11 21:39:00) [4]Вариан из [11] у меня работает в куче приложений. Почему не работает у Вас, не поятно. Разве что в него запихивается все, что угодно, только не TDateTime
Наиль (2008-10-11 17:53:00) [5]1. Руки кривые
2. Как не работает?
Dr. Genius (2008-10-11 17:46:00) [6]Извините, конечно, но то ли у меня руки кривые, то ли ни один из предложенных выше вариантов не работает…
Anatoly Podgoretsky (2008-10-08 20:53:00) [7]Form1.Caption := TimeToStr(dt1 - dt2);
Где dt1 > dt2
Anatoly Podgoretsky (2008-10-08 20:52:00) [8]Я же тебе написал в 8 формулу, а преобразование разницы в текст делается функцией TimeToStr
Примерно такForm1.Caption := TimeToStr(dt1, dt2);
Я не стал анализировать функцию, но должно быть порядка 38000 дней, видимо в функции ошибка. Кроме того непонятно зачем считать разницу между 2008 и 1899 годами?
Dr. Genius (2008-10-08 19:56:00) [9]При попытке использования ф-ии, которую любезно предоставил MsGuns (спасибо ему за это), выводится что-то типа этого: ‘239542:48:12’.
Вызываю я ф-ию так:
Form1.Caption := MS_ComFnPrintTimeInterval(Now, StrToTime(TimeEdit1.Text));
Может все дело во втором параметре – он должен быть типа TDateTime, а я указываю TTime.
Virgo_Style (2008-10-05 21:16:00) [10]Гм. Я тут в зеркало ругаюсь, что про SecondsBetween забыл, а оно вот как повернулось...
{RASkov} (2008-10-05 20:03:00) [11]Да уж.... судя по [7] - у меня такое подозрение, что вся фишка была в 10*60 :)
Palladin (2008-10-05 19:52:00) [12]да судя по
> Dr. Genius (04.10.08 11:05)
и
> Сергей Кокоулин (04.10.08 21:05) [10]
телепатор вирго_стайл'а, работающий на максимуме своих возможностей, показал, что, двуличному янусу, совсем непонятно, что было нужно...
{RASkov} (2008-10-05 19:45:00) [13]> Не :) Там на оборот минус нужен :)
Хотя это я про минус начал из-за [11] т.е.:
> result := ''; if ts>te then result := '-';
:о)
{RASkov} (2008-10-05 19:44:00) [14]> [15] Palladin © (05.10.08 19:39)
Не :) Там на оборот минус нужен :)
Palladin (2008-10-05 19:39:00) [15]
> Ну если только еще с минусом решить "проблему" :)
Abs :)
{RASkov} (2008-10-05 19:37:00) [16]> function MS_ComFnPrintTimeInterval(ds,de: TDateTime): string;
Если разница менее суток, то достаточно:
Result:=TimeToStr(ds-de);
Ну если только еще с минусом решить "проблему" :)
Автор-то на минуты счет вёл.... вот я и....)
MsGuns (2008-10-05 17:26:00) [17]>Германн © (05.10.08 02:57) [12]
>Откуда спёр?
Ну сам написал. А что, страшно ?
;)
Германн (2008-10-05 02:57:00) [18]
> MsGuns © (05.10.08 01:14) [11]
Откуда спёр?
MsGuns (2008-10-05 01:14:00) [19]function MS_ComFnPrintTimeInterval(ds,de: TDateTime): string;
// ds - дата-время начала
// de - дата-время конца
var
tms,tme: TTimeStamp;
ts,te: LongInt;
function ExtNCharToN(Number,NDigits: integer): string;
begin
result := IntToStr(Number);
while Length(result)<NDigits do result := '0'+result;
end;
begin
tms := DateTimeToTimeStamp(ds);
tme := DateTimeToTimeStamp(de);
ts := tms.Date*24*3600+tms.Time div 1000;
te := tme.Date*24*3600+tme.Time div 1000;
result := ''; if ts>te then result := '-';
ts := Abs(te-ts);
result := result+ExtNCharToN(ts div 3600,1)+':'+
ExtNCharToN((ts div 60) mod 60,2)+':'+
ExtNCharToN(ts mod 60,2);
end;
Сергей Кокоулин (2008-10-04 21:05:00) [20]
> Virgo_Style © (04.10.08 11:34) [7]
Спасибо!