віднімання часу

Як можна в Delphi відняти час? Тобто, щоб при операції 12:10:00 мінус 12:00:00 виходив відповідь = 10 хвилин (або 600 секунд).

робиться все просто. Переводите час в секунди і забираєте, а потім назад перетворіть)

А чи немає якої-небудь стандартної функції для цієї операції?

Чи не знайшов за посиланням нічого ділового. Дізнався лише тільки, що є такий стандартний модуль DateUtils.pas, але потрібну ф-ію в ній не знайшов.


> Dr. Genius # XA0; (04.10.08 11:18) [4]


> Але потрібну ф-ію в ній не знайшов.

SecondsBetween і інші подібні функціонально якраз знаходять різницю в секундах, хвилинах, годинах і т.д.

// момент істини
Caption: = FloatToStr ((T1-T2) * SecsPerDay);

Є це віднімання, в Дельфи робиться за допомогою оператора "-"

[8] + а час в Делфі - це просто число. речовий.
Точніше ціла частина числа - це дата, а дробова - час.

function MS_ComFnPrintTimeInterval (ds, de: TDateTime): string;
// ds - дата-час початку
// de - дата-час кінця
var
# XA0; tms, tme: TTimeStamp;
# XA0; ts, te: LongInt;

# XA0; function ExtNCharToN (Number, NDigits: integer): string;
# XA0; begin
# XA0; result: = IntToStr (Number);
# XA0; while Length (result) # XA0; end;

begin
# XA0; tms: = DateTimeToTimeStamp (ds);
# XA0; tme: = DateTimeToTimeStamp (de);
# XA0; ts: = tms.Date * 24 * 3600 + tms.Time div 1000;
# XA0; te: = tme.Date * 24 * 3600 + tme.Time div 1000;
# XA0; result: = ""; if ts> te then result: = "-";
# XA0; ts: = Abs (te-ts);
# XA0; result: = result + ExtNCharToN (ts div 3600,1) + ":" +
# XA0; # XA0; # XA0; # XA0; # XA0; # XA0; ExtNCharToN ((ts div 60) mod 60,2) + ":" +
# XA0; # XA0; # XA0; # XA0; # XA0; # XA0; ExtNCharToN (ts mod 60,2);
end;

Ну сам написав. А що, страшно.
;)


> Ну якщо тільки ще з мінусом вирішити "проблему" :)

Abs :)

> Чи не :) Там на оборот мінус потрібен :)

Хоча це я про мінус почав через [11] тобто .:

> Result: = ""; if ts> te then result: = "-";

: О)

да судячи з

> Dr. Genius (04.10.08 11:05)

і

> Сергій Кокоулін (04.10.08 21:05) [10]

телепатор вірго_стайл "а, що працює на максимумі своїх можливостей, показав, що, лукавість Януса, зовсім незрозуміло, що було потрібно.

Що ж. судячи з [7] - у мене така підозра, що вся фішка була в 10 * 60 :)

Гм. Я тут в дзеркало лаюся, що про SecondsBetween забув, а воно ось як повернулася.

При спробі використання ф-ії, яку люб'язно надав MsGuns (спасибі йому за це), виводиться щось типу цього: '239542: 48: 12'.

Викликаю я ф-ію так:

Form1.Caption: = MS_ComFnPrintTimeInterval (Now, StrToTime (TimeEdit1.Text));

Може вся справа в другому параметрі - він повинен бути типу TDateTime, а я вказую TTime.

Form1.Caption: = TimeToStr (dt1 - dt2);
Де dt1> dt2

Вибачте, звичайно, але чи то у мене руки криві, то чи жоден із запропонованих варіантів не допоможе ...

1. Руки криві
2. Як не працює?

Варіан з [11] у мене працює в купі додатків. Чому не працює у Вас, не поятно. Хіба що в нього запихається все, що завгодно, тільки не TDateTime

Ви що, охреніли отримувати інтервал у вигляді дати.

Так все в порядку, поки не надумає цілу частину перетворити в строкове представлення дати, тим більше для інтервалів менше 24 годин.

Пам'ять: 0.77 MB
Час: 0.028 c

Схожі статті