Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   UTC / Local Time (https://www.delphipraxis.net/207745-utc-local-time.html)

Edelfix 28. Apr 2021 14:32

Delphi-Version: 5

UTC / Local Time
 
Hallo,

ich suche schon seit ein paar Stunden nach einer eleganten Lösung für folgendes Problem:

Ich benötige die UTC Zeit für die Abflugzeit 24.02.2022 18:20 Uhr(Lokale Zeit). Abflug Ort ist Los Angelos / US.

Was ich schon versucht habe ist:

Delphi-Quellcode:
  TTimeZone.Local.ToUniversalTime();
Dabei wird aber die lokale Deutsche Zeit berücksichtigt.

Hat jemand eine Idee?

KodeZwerg 28. Apr 2021 14:55

AW: UTC / Local Time
 
Zitat:

Zitat von Edelfix (Beitrag 1488089)
Hat jemand eine Idee?

Jupp, solange es Windows ist solltest Du per SystemTimeToTzSpecificLocalTimeEx oder TzSpecificLocalTimeToSystemTime Erfolg haben.

Ich hoffe das hilft Dir und löst Dein Problem.

Edelfix 28. Apr 2021 15:27

AW: UTC / Local Time
 
Welche Uses benötige ich für SystemTimeToTzSpecificLocalTimeEx?

himitsu 28. Apr 2021 15:38

AW: UTC / Local Time
 
Tipp: Strg+Shift+F und als Suchverzeichnis z.B. $(BDS) oder $(BDS)\Sources (inkl. Unterverzeichnisse)
und für den Dateifilter mindestens *.pas;*.inc

Edelfix 28. Apr 2021 15:46

AW: UTC / Local Time
 
Super Idee. Merke mir für die Zukunft.

Leider kein Treffer bei "SystemTimeToTzSpecificLocalTimeEx".

Habe jetzt etwas brauchbares gefunden das ich noch anpassen muss:

https://stackoverflow.com/questions/...ocal-time-zone

KodeZwerg 28. Apr 2021 15:52

AW: UTC / Local Time
 
Zitat:

Zitat von Edelfix (Beitrag 1488094)
Welche Uses benötige ich für SystemTimeToTzSpecificLocalTimeEx?

Ich habe mir das selbst eingebunden da es Delphi nicht nativ unterstützt. Habe deinen letzten Link noch nicht angeschaut, wenn Du Hilfe dabei benötigst, kram ich meinen Source raus.

himitsu 28. Apr 2021 15:54

AW: UTC / Local Time
 
Da das eine WinAPI ist, wäre der erste Blick ins MSDN ... kann sein, dass Delphi diese API aber noch nicht drin hat.

siehe MSDN oder Google (die Seiten zu den API wurden oben aber bereits verlinkt)
Bei Google suchenSystemTimeToTzSpecificLocalTimeEx
MSDN-Library durchsuchenSystemTimeToTzSpecificLocalTimeEx

Und dann entweder selber die API von C++ nach Delphi übersetzen
oder schauen, ob es irgendwo eine Delphi-Library gibt, wo das schon übersetzt ist. (z.B. die JEDI)

KodeZwerg 28. Apr 2021 16:03

AW: UTC / Local Time
 
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)

Edelfix 28. Apr 2021 16:12

AW: UTC / Local Time
 
Super. Danke an alle.

Lloyd Bates 29. Apr 2021 11:12

AW: UTC / Local Time
 
Ich möchte als Alternative noch https://github.com/pavkam/tzdb vorschlagen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz