Ich hätte jetzt zwar noch auf die zwei zusätzlichen Variablen verzichtet, was allerdings an der Funktion nix ändert.
Delphi-Quellcode:
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;
Und wenn man jetzt mal ganz billig
LDateTimeInMSecs := Trunc(DateTime * MSecsPerDay);
statt
LDateTimeInMSecs := Round(DateTime * MSecsPerDay);
verwendet.
Delphi-Quellcode:
function DateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp;
begin
Result.Date := Trunc(DateTime) + DateDelta;
Result.Time := Trunc(Frac(DateTime) * MSecsPerDay));
end;
Achtung: Vor dem 30.12.1899 würde diese Variante nicht korrekt rechnen.
Eigentlich ja
Result.Time := Trunc(Abs(Frac(DateTime)) * MSecsPerDay));
, aber da es in jenem negativen Bereich eh falsch rechnet, ist dieses nun auch sowas von egal.