![]() |
Delphi-Version: 5
Funktion "DateTimeToTimeStamp" in Delphicode übersetzen
Hallo Delphi-Freunde,
ich habe mal eine Frage zu der Funktion "DateTimeToTimeStamp" der Unit SysUtils. Ist Jemand in der Lage diesen Assemblercode in Delphicode zu übersetzen. Vielen Dank für eure Bemühungen!
Delphi-Quellcode:
function DateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp;
asm PUSH EBX {$IFDEF PIC} PUSH EAX CALL GetGOT MOV EBX,EAX POP EAX {$ELSE} XOR EBX,EBX {$ENDIF} 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; |
AW: Funktion "DateTimeToTimeStamp" in Delphicode übersetzen
Vermutlich keine 1:1 Übersetzung des asm Codes, aber was die Funktion macht:
Delphi-Quellcode:
function DateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp;
var LDateTimeInMSecs: Int64; LDateInMSecs: Int64; LTimeInMSecs: Int64; begin LDateTimeInMSecs := Round(DateTime * MSecsPerDay); LDateInMSecs := LDateTimeInMSecs div MSecsPerDay; LTimeInMSecs := Abs(LDateTimeInMSecs) mod MSecsPerDay; Result.Date := DateDelta + LDateInMSecs; Result.Time := LTimeInMSecs; end; |
AW: Funktion "DateTimeToTimeStamp" in Delphicode übersetzen
Hallo Stevie,
es funktioniert hervorragend! Vielen lieben Dank, dass ist genau das, was ich gesucht habe. |
AW: Funktion "DateTimeToTimeStamp" in Delphicode übersetzen
Ich hätte jetzt zwar noch auf die zwei zusätzlichen Variablen verzichtet, was allerdings an der Funktion nix ändert.
Delphi-Quellcode:
Und wenn man jetzt mal ganz billig
function DateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp;
var LDateTimeInMSecs: Int64; begin LDateTimeInMSecs := Round(DateTime * MSecsPerDay); Result.Date := (LDateTimeInMSecs div MSecsPerDay) + DateDelta; Result.Time := Abs(LDateTimeInMSecs) mod MSecsPerDay; end;
Delphi-Quellcode:
statt
LDateTimeInMSecs := Trunc(DateTime * MSecsPerDay);
Delphi-Quellcode:
verwendet. :stupid:
LDateTimeInMSecs := Round(DateTime * MSecsPerDay);
Delphi-Quellcode:
Achtung: Vor dem 30.12.1899 würde diese Variante nicht korrekt rechnen.
function DateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp;
begin Result.Date := Trunc(DateTime) + DateDelta; Result.Time := Trunc(Frac(DateTime) * MSecsPerDay)); end; Eigentlich ja
Delphi-Quellcode:
, aber da es in jenem negativen Bereich eh falsch rechnet, ist dieses nun auch sowas von egal. :oops:
Result.Time := Trunc(Abs(Frac(DateTime)) * MSecsPerDay));
|
AW: Funktion "DateTimeToTimeStamp" in Delphicode übersetzen
Wie war das nochmal? Wenn die Funktion nicht richtig rechnet, ist egal, wie schnell sie dabei ist? :stupid:
|
AW: Funktion "DateTimeToTimeStamp" in Delphicode übersetzen
Aktuell, also seit dem Jahre 1900, rechnet die ja richtig. :angle2:
|
AW: Funktion "DateTimeToTimeStamp" in Delphicode übersetzen
Nach meinen bisherigen Erfahrungen rechnet die Funktion rückwärts bis zum 1.1.0001 korrekt, oder wo ist mein Denkfehler?
zeige mal bitte ein Beispiel. Alternativ helfen folgende Funktionen von mir: ![]() |
AW: Funktion "DateTimeToTimeStamp" in Delphicode übersetzen
Zitat:
|
AW: Funktion "DateTimeToTimeStamp" in Delphicode übersetzen
Qed:)
|
AW: Funktion "DateTimeToTimeStamp" in Delphicode übersetzen
Immer diese Diskussionen um schon längst gelöste Fragen nur um Variablen zu sparen, die das ganze eigentlich für den Fragesteller nur lesbarer und nachvollziehbarer machen sollten... :roll:
Delphi-Quellcode:
qef
program Project1;
{$APPTYPE CONSOLE} uses SysUtils; function HimisDateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp; begin Result.Date := Trunc(DateTime) + DateDelta; Result.Time := Trunc(Frac(DateTime) * MSecsPerDay); end; var d: TDateTime; t: TTimeStamp; begin d := EncodeDate(1899, 11, 11) + EncodeTime(11, 11, 11, 00); t := DateTimeToTimeStamp(d); Writeln(t.Date, ' ', t.Time); t := HimisDateTimeToTimeStamp(d); Writeln(t.Date, ' ' , t.Time); Readln; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz