Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#15

AW: proprietäres Datumsformat in DB-Tabelle analysieren

  Alt 16. Jan 2018, 16:51
Jetzt wo du es sagst, mal schnell nachgesehn, ob meine beschriebene Berechnung stimmt.
Delphi-Quellcode:
function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime;
asm
{$IFDEF ALIGN_STACK}
        SUB ESP, 4
{$ENDIF ALIGN_STACK}
        PUSH EBX
{$IFDEF PIC}
        PUSH EAX
        CALL GetGOT
        MOV EBX,EAX
        POP EAX
{$ELSE !PIC}
        XOR EBX,EBX
{$ENDIF !PIC}
        PUSH EAX
        CALL ValidateTimeStamp
        POP EAX
        MOV ECX,[EAX].TTimeStamp.Time
        MOV EAX,[EAX].TTimeStamp.Date
        SUB EAX,DateDelta
        IMUL [EBX].IMSecsPerDay
        OR EDX,EDX
        JNS @@1
        SUB EAX,ECX
        SBB EDX,0
        JMP @@2
@@1: ADD EAX,ECX
        ADC EDX,0
@@2: PUSH EDX
        PUSH EAX
        FILD QWORD PTR [ESP]
        FDIV [EBX].FMSecsPerDay
        ADD ESP,8
        POP EBX
{$IFDEF ALIGN_STACK}
        ADD ESP, 4
{$ENDIF ALIGN_STACK}
end;
Aua, wozu muß das unbedingt in Assembler sein (XE),
wenn auch sowas reicht?
Delphi-Quellcode:
function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime;
begin
  ValidateTimeStamp(TimeStamp);
  Result := TimeStamp.Time / MSecsPerDay + TimeStamp.Data - DateDelta;
end;

// Mein Vorschlag sagte zwar
// Result := TimeStamp.Data - DateDelta + TimeStamp.Time / MSecsPerDay;
// aber ohne Zwischenvariable für die Division isses bestimmt besser.
Integer.Parse: StrToInt in alten Delphis.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat