![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DecodeTime missing in KOL
Boguslaw Brandys © (2005-04-12 00:19:00)Hmm... DecodeTime would be useful to obtain difference beetwen two time points divided into count of hours,minutes,seconds,milliseconds.
DecodeDate exists in KOL but not DecodeTime.Why? Maybe someone would give an example ?
Владимир Кладов (2005-04-13 20:47:00) [1]sorry, Frac (fractional part of floating point number). Should be defined in system unit.
Boguslaw Brandys (2005-04-13 19:04:00) [2]Where is Fraq defined ?
Владимир Кладов (2005-04-13 16:25:00) [3]try this:
DateTime2SystemTime( Fraq( D1 - D2 ) + Trunc( Now ), S );
Boguslaw Brandys (2005-04-13 13:05:00) [4]DateTime2SystemTime work good but I mean DecodeTime in context of decode period between two dates !
var Start,End: TDateTime; S: TSystemTime;
End := Now - Start;
DateTime2SystemTime( End, S );
// S.wHour; S.wMinute; S.wSecond; - bad result now :-(
thaddy (2005-04-12 20:50:00) [5]Again, there is more in kol than we know.
Thanks Vladimir!
Владимир Кладов (2005-04-12 19:52:00) [6]var D: TDateTime; S: TSystemTime;
DateTime2SystemTime( D, S );
// S.wHour; S.wMinute; S.wSecond; ?
thaddy (2005-04-12 19:25:00) [7]and forgot:
type
TTimeStamp = record
Time: Integer;
Date: Integer;
end;
const
DateDelta = 693594;
thaddy (2005-04-12 19:21:00) [8]interface
uses windows,kol,kolmath{??};
procedure DecodeTime(const DateTime: TDateTime; var Hour, Min, Sec, MSec: Word);
implementation
const
HoursPerDay = 24;
MinsPerHour = 60;
SecsPerMin = 60;
MSecsPerSec = 1000;
MinsPerDay = HoursPerDay * MinsPerHour;
SecsPerDay = MinsPerDay * SecsPerMin;
MSecsPerDay = SecsPerDay * MSecsPerSec;
FMSecsPerDay: Single = MSecsPerDay;
IMSecsPerDay: Integer = MSecsPerDay;
function DateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp;
asm
PUSH EBX
XOR EBX,EBX
MOV ECX,EAX
FLD DateTime
FMUL [EBX].FMSecsPerDay
SUB ESP,8
FISTP QWORD PTR [ESP]
FWAIT
POP EAX
POP EDX
OR EDX,EDX
JNS @@1
NEG EDX
NEG EAX
SBB EDX,0
DIV [EBX].IMSecsPerDay
NEG EAX
JMP @@2
@@1: DIV [EBX].IMSecsPerDay
@@2: ADD EAX,DateDelta
MOV [ECX].TTimeStamp.Time,EDX
MOV [ECX].TTimeStamp.Date,EAX
POP EBX
end;
procedure DecodeTime(const DateTime: TDateTime; var Hour, Min, Sec, MSec: Word);
var
MinCount, MSecCount: Word;
begin
DivMod(DateTimeToTimeStamp(DateTime).Time, SecsPerMin * MSecsPerSec, MinCount, MSecCount);
DivMod(MinCount, MinsPerHour, Hour, Min);
DivMod(MSecCount, MSecsPerSec, Sec, MSec);
end;
end.