Текущий архив: 2008.11.23;
Скачать: CL | DM;
Вниз
Вычитание времени Найти похожие ветки
← →
Dr. Genius (2008-10-04 11:05) [0]Здравствуйте!
Как можно в Delphi вычесть время? То есть, чтобы при операции 12:10:00 минус 12:00:00 получался ответ = 10 минут (или 600 секунд).
← →
Smel (2008-10-04 11:08) [1]делается все просто. Переводите время в секунды и отнимаете, а потом обратно преобразуйте)
← →
Dr. Genius (2008-10-04 11:11) [2]А нет ли какой-нибудь стандартной функции для этой операции?
← →
Smel (2008-10-04 11:12) [3]http://yandex.ru/yandsearch?text=%D0%9A%D0%B0%D0%BA+%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE+%D0%B2+Delphi+%D0%B2%D1%8B%D1%87%D0%B5%D1%81%D1%82%D1%8C+%D0%B2%D1%80%D0%B5%D0%BC%D1%8F
← →
Dr. Genius (2008-10-04 11:18) [4]Не нашел по ссылке ничего дельного. Узнал лишь только, что есть такой стандартный модуль DateUtils.pas, но нужную ф-ию в ней не нашел.
← →
Smel (2008-10-04 11:21) [5]плохо смотрели
http://ftf.grsu.by/UchProc/konspekt/delphi/ch05/ch05
← →
DVM © (2008-10-04 11:32) [6]
> Dr. Genius (04.10.08 11:18) [4]
> но нужную ф-ию в ней не нашел.
SecondsBetween и другие подобные функци как раз находят разность в секундах, минутах, часах и т.д.
← →
Virgo_Style © (2008-10-04 11:34) [7]
//подготовка
var T1,T2:TDateTime;
begin
T1:=EncodeTime(12,10,00,0);
T2:=EncodeTime(12,00,00,0);
// момент истины
Caption := FloatToStr( (T1-T2)*SecsPerDay );
//это необязательно
PlaySound("tada.wav",0,SND_FILENAME);
← →
Anatoly Podgoretsky © (2008-10-04 12:16) [8]> Dr. Genius (04.10.2008 11:11:02) [2]
Есть это вычитание, в Дельфи делается с помощью оператора "-"
← →
{RASkov} © (2008-10-04 12:39) [9][8] + а время в делфи - это просто число.... вещественное.
Точнее целая часть числа - это дата, а дробная - время.
← →
Сергей Кокоулин (2008-10-04 21:05) [10]
> Virgo_Style © (04.10.08 11:34) [7]
Спасибо!
← →
MsGuns © (2008-10-05 01:14) [11]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-05 02:57) [12]
> MsGuns © (05.10.08 01:14) [11]
Откуда спёр?
← →
MsGuns © (2008-10-05 17:26) [13]>Германн © (05.10.08 02:57) [12]
>Откуда спёр?
Ну сам написал. А что, страшно ?
;)
← →
{RASkov} © (2008-10-05 19:37) [14]> function MS_ComFnPrintTimeInterval(ds,de: TDateTime): string;
Если разница менее суток, то достаточно:Result:=TimeToStr(ds-de);
Ну если только еще с минусом решить "проблему" :)
Автор-то на минуты счет вёл.... вот я и....)
← →
Palladin © (2008-10-05 19:39) [15]
> Ну если только еще с минусом решить "проблему" :)
Abs :)
← →
{RASkov} © (2008-10-05 19:44) [16]> [15] Palladin © (05.10.08 19:39)
Не :) Там на оборот минус нужен :)
← →
{RASkov} © (2008-10-05 19:45) [17]> Не :) Там на оборот минус нужен :)
Хотя это я про минус начал из-за [11] т.е.:
> result := ""; if ts>te then result := "-";
:о)
← →
Palladin © (2008-10-05 19:52) [18]да судя по
> Dr. Genius (04.10.08 11:05)
и
> Сергей Кокоулин (04.10.08 21:05) [10]
телепатор вирго_стайл"а, работающий на максимуме своих возможностей, показал, что, двуличному янусу, совсем непонятно, что было нужно...
← →
{RASkov} © (2008-10-05 20:03) [19]Да уж.... судя по [7] - у меня такое подозрение, что вся фишка была в 10*60 :)
← →
Virgo_Style © (2008-10-05 21:16) [20]Гм. Я тут в зеркало ругаюсь, что про SecondsBetween забыл, а оно вот как повернулось...
← →
Dr. Genius (2008-10-08 19:56) [21]При попытке использования ф-ии, которую любезно предоставил MsGuns (спасибо ему за это), выводится что-то типа этого: ‘239542:48:12’.
Вызываю я ф-ию так:Form1.Caption := MS_ComFnPrintTimeInterval(Now, StrToTime(TimeEdit1.Text));
Может все дело во втором параметре – он должен быть типа TDateTime, а я указываю TTime.
← →
Anatoly Podgoretsky © (2008-10-08 20:52) [22]Я же тебе написал в 8 формулу, а преобразование разницы в текст делается функцией TimeToStr
Примерно такForm1.Caption := TimeToStr(dt1, dt2);
Я не стал анализировать функцию, но должно быть порядка 38000 дней, видимо в функции ошибка. Кроме того непонятно зачем считать разницу между 2008 и 1899 годами?
← →
Anatoly Podgoretsky © (2008-10-08 20:53) [23]Form1.Caption := TimeToStr(dt1 - dt2);
Где dt1 > dt2
← →
Dr. Genius (2008-10-11 17:46) [24]Извините, конечно, но то ли у меня руки кривые, то ли ни один из предложенных выше вариантов не работает…
← →
Наиль © (2008-10-11 17:53) [25]1. Руки кривые
2. Как не работает?
← →
MsGuns © (2008-10-11 21:39) [26]Вариан из [11] у меня работает в куче приложений. Почему не работает у Вас, не поятно. Разве что в него запихивается все, что угодно, только не TDateTime
← →
Johnmen © (2008-10-11 22:38) [27]Вы чё, охренели получать интервал в виде даты????????????????
← →
Anatoly Podgoretsky © (2008-10-11 22:52) [28]Да все в порядке, пока не вздумает целую часть преобразовать в строковое представление даты, тем более для интервалов менее 24 часов.
← →
korneley © (2008-10-12 04:38) [29]
> {RASkov} © (04.10.08 12:39) [9]
> [8] + а время в делфи - это просто число.... вещественное.
> Точнее целая часть числа - это дата, а дробная - время.
Не... Всё число это кол-во суток, прошедших с. Никак не дата. Поэтому дробная часть - не время, а количество неполных суток. Это потом, умножив на тайно-шаманские числа (24 * 60 * 60), можно и до секунд, прошедших добраться.
Страницы: 1 вся ветка
Текущий архив: 2008.11.23;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.02 c