Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
15-1222252560
DelphiN!
2008-09-24 14:36
2008.11.23
Объединение 2х сетей в одну


15-1222424019
TUser
2008-09-26 14:13
2008.11.23
Несказка для программистов


3-1209540771
IgorBet
2008-04-30 11:32
2008.11.23
Вопросы надежности при частом создании/ удалении таблиц


2-1223881796
DJones
2008-10-13 11:09
2008.11.23
Проблема с доступом к private-членам класса


2-1223840729
programmer90
2008-10-12 23:45
2008.11.23
Особенности String переменной