Einzelnen Beitrag anzeigen

kagi3624

Registriert seit: 3. Feb 2020
138 Beiträge
 
Delphi 6 Enterprise
 
#4

AW: TDateTime Zeitzone setzen

  Alt 14. Okt 2020, 14:47
Das stimmt spätestens nach der nächsten Zeitumstellung nicht mehr.

In der Unit System.DateUtils steckt die Klasse TTimeZone
Nicht in Delphi6. Da gibts gar nichts zu Zone.

Die Funktion Delphi-Referenz durchsuchenUnixToDateTime hat in neueren Delphis einen optionalen zweiten Parameter AReturnUTC. Wenn du wirklich D6 benutzt, wirst du einen Umweg gehen müssen, z.B. mit den Funktionen Delphi-Referenz durchsuchenDateTimeToSystemTime MSDN-Library durchsuchenSystemTimeToTzSpecificLocalTime und Delphi-Referenz durchsuchenSystemTimeToDateTime. Vielleicht hat Delphi sogar eine eigene Funktion zur Umrechnung von UTC in lokale Zeit (und/oder umgekehrt).

Grüße
Dalai
Delphi-Quellcode:
    unixT1 := 1602679692;
    timeBegin := UnixToDateTime(unixT1);
    DateTimeToSystemTime(timeBegin, dSysTime);
Funktioniert leider nicht

Hab eine Lösung hier gefunden. Ist zwar für Delphi > 6, aber es funktioniert!

Delphi-Quellcode:
function LocalDateTimeFromUTCDateTime(const UTCDateTime: TDateTime): TDateTime;
var
  LocalSystemTime: TSystemTime;
  UTCSystemTime: TSystemTime;
  LocalFileTime: TFileTime;
  UTCFileTime: TFileTime;
begin
  DateTimeToSystemTime(UTCDateTime, UTCSystemTime);
  SystemTimeToFileTime(UTCSystemTime, UTCFileTime);
  if FileTimeToLocalFileTime(UTCFileTime, LocalFileTime)
  and FileTimeToSystemTime(LocalFileTime, LocalSystemTime) then begin
    Result := SystemTimeToDateTime(LocalSystemTime);
  end else begin
    Result := UTCDateTime; // Default to UTC if any conversion function fails.
  end;
end;

Geändert von kagi3624 (14. Okt 2020 um 15:28 Uhr)
  Mit Zitat antworten Zitat