Einzelnen Beitrag anzeigen

Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: UTC / Local Time

  Alt 28. Apr 2021, 16:03
Hier ist meine recht alte Portierung.
Delphi-Quellcode:
program Project1;

uses Windows, SysUtils, DateUtils;

// include winapi methods
function TzSpecificLocalTimeToSystemTime(lpTimeZoneInformation: PTimeZoneInformation; var lpLocalTime, lpUniversalTime: TSystemTime): BOOL; stdcall; external kernel32 name 'TzSpecificLocalTimeToSystemTime';
function SystemTimeToTzSpecificLocalTime(lpTimeZoneInformation: PTimeZoneInformation; var lpUniversalTime, lpLocalTime: TSystemTime): BOOL; stdcall; external kernel32 name 'SystemTimeToTzSpecificLocalTime';

// convert local time to UTC
function DateTimeToUTC(const Local: TDateTime): TDateTime;
var
  TZI: TTimeZoneInformation;
  LocalTime,
  UniversalTime: TSystemTime;
begin
  GetTimeZoneInformation(TZI);
  DateTimeToSystemTime(Local, LocalTime);
  TzSpecificLocalTimeToSystemTime(@TZI, LocalTime, UniversalTime);
  Result := SystemTimeToDateTime(UniversalTime);
end;

// convert UTC to local time
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;

// example usage
var
  Local,
  UTC: TDateTime;
begin
  Local := Now;
  UTC := DateTimeToUTC(Local);
  WriteLn('Local: ' + DateTimeToStr(Local));
  WriteLn('UTC: ' + DateTimeToStr(UTC));
  WriteLn('Offset: ' + IntToStr(SecondsBetween(Local, UTC) div 60 div 60));
  ReadLn;
end.
Dies ist ein Grundstein und sollte helfen das Problem zu lösen. (Der obige Code half mir den Zeitunterschied in Stunden zu ermitteln)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat