Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вычитание времени [D6, XP]


Страницы:   1 2

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]


Спасибо!


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо