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

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

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.


Наверх

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