Gehe zu deutscher Webseite

ViaThinkSoft CodeLib

This article is in:
CodeLibProgramming aidsDelphi

function Rfc3339ToDatetime(rfc: string): TDatetime;

  // convert UTC to local time
  // https://www.delphipraxis.net/207745-utc-local-time.html
  function UTCToLocalDateTime(const UTC: TDateTime): TDateTime;
  var
    TZI: TTimeZoneInformation;
    LocalTime,
    UniversalTime: TSystemTime;
  begin
    GetTimeZoneInformation(TZI);
    DateTimeToSystemTime(UTC, UniversalTime);
    SystemTimeToTzSpecificLocalTime(@TZI, UniversalTime, LocalTime);
    Result := SystemTimeToDateTime(LocalTime);
  end;

var
  jahr, monat, tag, stunde, minute, sekunde, off_h, off_m: integer;
  utc: TDateTime;
begin
  // 2020-07-27T10:03:33+0000
  // 123456789012345678901234
  jahr    := StrToInt(Copy(rfc,  1, 4));
  monat   := StrToInt(Copy(rfc,  6, 2));
  tag     := StrToInt(Copy(rfc,  9, 2));
  stunde  := StrToInt(Copy(rfc, 12, 2));
  minute  := StrToInt(Copy(rfc, 15, 2));
  sekunde := StrToInt(Copy(rfc, 18, 2));
  off_h   := StrToInt(Copy(rfc, 21, 2));
  off_m   := StrToInt(Copy(rfc, 23, 2));
  utc     := EncodeDateTime(jahr, monat, tag, stunde-off_h, minute-off_m, sekunde, 0);
  result  := UTCToLocalDateTime(utc);
end;
Daniel Marschall
ViaThinkSoft Co-Founder