Home » Tipps & Tricks » Object Pascal » Datumswerte » Zeitformat von TDateTime ins UNIX-Format

Zeitformat von TDateTime ins UNIX-Format

Die folgende Funktion konvertiert ein ’normales‘ Datum in einen unix-Timestamp. Der Parameter UseBias gibt an, ob Zeitverschiebung mit beachtet werden soll.

function TimeStampHumanToUnix(const HumanStamp: tDateTime;
                              UseBias: boolean): cardinal;
var
  iTime: integer;
  hh, mm, ss, ms: word;
  TZI: TTimeZoneInformation;

const
  FirstOf1970 = 25569; //[s] seit 30.12.1899 bis 01.01.1970 (WinZeit -> UnixZeit)
  OneDay = 86400;      //in [s]
  OneHour = 3600;      //in [s]
  OneMinute = 60;      //in [s]

begin
  Result := 0;

  case GetTimeZoneInformation(TZI) of
    $FFFFFFFF: UseBias := False;
  end;

  DecodeTime(HumanStamp, hh, mm, ss, ms);

  { Tage seit 1.1.1970 in Sekunden }
  iTime := (Trunc(HumanStamp) - FirstOf1970) * OneDay;
  { Stunden und Minuten und Sekunden aufaddieren }
  iTime := iTime + (hh * OneHour);
  if UseBias
  then iTime := iTime + ((mm + TZI.Bias + TZI.DaylightBias) * OneMinute)
  else iTime := iTime + (mm * OneMinute);
  iTime := iTime + ss;
  if iTime < 0 then iTime := 0;
  Result := iTime;

end;