Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TDateTime Zeitzone setzen (https://www.delphipraxis.net/205770-tdatetime-zeitzone-setzen.html)

kagi3624 14. Okt 2020 13:00

Delphi-Version: 6

TDateTime Zeitzone setzen
 
Moin,

ich muss hier Einen Unix Zeitstempel in menschenlesbare Zeit umwandeln. Mit UnixToDatetime von DateUtils wird es auch gemacht, bis auf die Sache, dass es in der UTC Zeitzone ausgegeben wird. Gibt es eine einfache Funktion bzw. Parameter um es auch UTC +2 zu setzen. Dankeschön.

Edit: Hab jetzt einfach IncHour draufgeworfen. K.A. ob es das "richtige" vorgehen ist. Wenn nicht, bitte sagen :D

Der schöne Günther 14. Okt 2020 13:10

AW: TDateTime Zeitzone setzen
 
Das stimmt spätestens nach der nächsten Zeitumstellung nicht mehr.

In der Unit System.DateUtils steckt die Klasse TTimeZone

Dalai 14. Okt 2020 13:18

AW: TDateTime Zeitzone setzen
 
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

kagi3624 14. Okt 2020 13:47

AW: TDateTime Zeitzone setzen
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1475513)
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.

Zitat:

Zitat von Dalai (Beitrag 1475514)
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;

Dalai 14. Okt 2020 15:35

AW: TDateTime Zeitzone setzen
 
Zitat:

Zitat von kagi3624 (Beitrag 1475515)
Delphi-Quellcode:
    unixT1 := 1602679692;
    timeBegin := UnixToDateTime(unixT1);
    DateTimeToSystemTime(timeBegin, dSysTime);
Funktioniert leider nicht :(

Du musst schon alle genannten Funktionen benutzen. Du willst ja keine TSystemTime haben sondern TDateTime. Also häng noch SystemTimeToTzSpecificLocalTime und SystemTimeToDateTime dran, dann sollte das tun.

Grüße
Dalai

TurboMagic 14. Okt 2020 19:30

AW: TDateTime Zeitzone setzen
 
Zitat:

Zitat von kagi3624 (Beitrag 1475515)
Nicht in Delphi6. Da gibts gar nichts zu Zone.

Tja, neuere Versionen sind halt nicht nur neuer sondern haben auch neue zusätzliche Funktionen... ;-)

kagi3624 15. Okt 2020 06:29

AW: TDateTime Zeitzone setzen
 
Zitat:

Zitat von TurboMagic (Beitrag 1475528)
Zitat:

Zitat von kagi3624 (Beitrag 1475515)
Nicht in Delphi6. Da gibts gar nichts zu Zone.

Tja, neuere Versionen sind halt nicht nur neuer sondern haben auch neue zusätzliche Funktionen... ;-)

Solange die amerikanischen Atomraketen noch mit Fortran 4 fliegen... Ich hab mir weder Delphi noch irgendeine Version davon ausgesucht :cry:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 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