Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by samso,
7. Jun 2018
Die Fälle in denen das Datum >= 30.12.1899 ist, wird bereits durch die Abfrage "d>=0" behandelt und führt immer in den Zweig "Result := d". Deshalb ist die Abfrage value <= cDelphiEpocheUT redundant.
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by samso,
7. Jun 2018
Leider nicht. Bei der Uhrzeit 00:00:00 gab es Probleme, die ich so gelöst habe:
uses
SysUtils, Math;
function UnixTimeToDatetime(UnixTime: Int64): TDatetime;
var
d, t: Double;
begin
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by samso,
5. Jun 2018
So, ich melde mich wieder zurück, mit folgendem Vorschlag:
function UnixTimeToDatetime(UnixTime: Int64): TDatetime;
var
t: Double;
begin
t := UnixTime/SecsPerDay + UnixDateDelta;
if t>=0
then
Result := t
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by samso,
5. Jun 2018
Ja, das 1899-Problem habe ich nun auch erkannt. Das sollte schon mal besser sein:
function DatetimeToUnixTime(Datetime: TDatetime): Int64;
var
t: TDatetime;
begin
if Datetime<0
then
t := trunc(Datetime) - frac(Datetime) - UnixDateDelta
else
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by samso,
5. Jun 2018
Die Zeitzone würde ich gesondert behandeln. D.h. ich würde den Datetimewert vor der Konvertierung in UTC umrechnen und dann in die Unixtimestamp umrechnen. Im umgekehrten Fall würde ich den berechneten Datetimewert wieder in lokale Zeit umrechnen, falls das erforderlich sein sollte. Hier mein Vorschlag für die Umrechnung von UTC-Datetimewerte in die Unixtimestamp und zurück (nur grob mit einigen...