Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Abweichung von UTC bekommen (https://www.delphipraxis.net/92681-abweichung-von-utc-bekommen.html)

Luckie 24. Mai 2007 11:25

Re: Abweichung von UTC bekommen
 
Zitat:

Zitat von Andreas L.
Auf den von dir verlinkten Artikel war ich ja schon. Aber dort steht nirgendwo was wie man herausbekommt ob gerade Sommer- oder Winterzeit ist. Wie lautet denn die benötigte Funktion?

*mit-dem-Kopf-schüttel*:
Zitat:

Return Value

If the function succeeds, it returns one of the following values.
TIME_ZONE_ID_UNKNOWN
TIME_ZONE_ID_STANDARD
TIME_ZONE_ID_DAYLIGHT

Andreas L. 24. Mai 2007 11:33

Re: Abweichung von UTC bekommen
 
Ich dachte immer DayLight heißt Tageslicht :|

chaosben 24. Mai 2007 11:37

Re: Abweichung von UTC bekommen
 
*den Namen zu "René Descartes" wechsel*

Die Sommerzeit heißt im Englischen "Daylight Saving Time" oder kurz DST.

*wieder Benjamin bin*

Luckie 24. Mai 2007 11:53

Re: Abweichung von UTC bekommen
 
Zitat:

Zitat von Andreas L.
Ich dachte immer DayLight heißt Tageslicht :|

Nun ja, wenn man seinen Kopf etwas bemüht, dann könnte man zu dem Schluss kommen, dass es wohl keine Zeitzone geben wird, die eine Tag- und Nachtzeit hat. Und demzufolge es sich eigentlich nur um die Sommerzeit handeln kann.

Andreas L. 24. Mai 2007 12:20

Re: Abweichung von UTC bekommen
 
Hab den Code jetzt ein bisschen modifiziert. Bekomme jetzt aber -2 Stunden:

Delphi-Quellcode:
function TXSPF.GetTimeZoneBias:String;
var
  tzi : TTimeZoneInformation;
begin
   case GetTimeZoneInformation(tzi) of
      TIME_ZONE_ID_STANDARD:
         result := intToStr(tzi.Bias div 60);

      TIME_ZONE_ID_DAYLIGHT: // Sommerzeit
         Result := IntToStr((tzi.Bias + tzi.DaylightBias) div 60);
   else
      Result := '00';
   end;
end;

Luckie 24. Mai 2007 12:46

Re: Abweichung von UTC bekommen
 
Man vergleiche:
shmia:
Delphi-Quellcode:
function GetTimeZoneBias:TDateTime;
const
   MINUTES_PER_DAY = 24.0 * 60.0;
var
  tzi : TTimeZoneInformation;
begin
   case GetTimeZoneInformation(tzi) of
      TIME_ZONE_ID_STANDARD:
         result := (tzi.Bias) / MINUTES_PER_DAY;

      TIME_ZONE_ID_DAYLIGHT: // Sommerzeit
         Result := (tzi.Bias+tzi.DaylightBias) / MINUTES_PER_DAY;
   else
      Result := 0.0;
   end;
end;
du:
Delphi-Quellcode:
function TXSPF.GetTimeZoneBias:String;
var
  tzi : TTimeZoneInformation;
begin
   case GetTimeZoneInformation(tzi) of
      TIME_ZONE_ID_STANDARD:
         result := intToStr(tzi.Bias div 60);

      TIME_ZONE_ID_DAYLIGHT: // Sommerzeit
         Result := IntToStr((tzi.Bias + tzi.DaylightBias) div 60);
   else
      Result := '00';
   end;
end;

Andreas L. 24. Mai 2007 13:11

Re: Abweichung von UTC bekommen
 
Wenn ich div (24 * 60) verwende, bekomme ich als Ergebniss 30. :wiejetzt:

alex517 24. Mai 2007 14:08

Re: Abweichung von UTC bekommen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

ggf wäre noch folgendes zu beachten:

GetTimeZoneInformation gibt aktuellen Bias also passend zum Systemdatum zurück.
Das wäre heute den 24.05.2007 die Sommerzeit, also +02:00.

Wenn der HEUTE zu konvertierende Zeitpunkt z.B. der 18.02.2007 16:30 ist, so
galt am 18.02.2007 aber die Normal(Winter)zeit also +01:00.
18.02.2007 16:30 --> "18.02.2007T16:30:00+02:00" wär damit falsch!

Besonders interessant wird die Geschichte in den Nächten der Umstellung.

Aber vielleicht denke ich ja auch zu komplizert?!?

alex

Andreas L. 24. Mai 2007 14:47

Re: Abweichung von UTC bekommen
 
Die Unit beinhaltet genau das was ich brauche: DateTime2XML und wieder zurück :-)

Danke. Darf man die mit einer OpenSource-Komponente weitergeben?

shmia 24. Mai 2007 14:50

Re: Abweichung von UTC bekommen
 
Zitat:

Zitat von Andreas L.
Hab den Code jetzt ein bisschen modifiziert.

Ich fand den Code vorher besser!!
Wichtig ist auch die Formel : UTC = lokaleZeit + GetTimeZoneBias
Folgende Zeile zeigt die Zeit nach UTC an:
Delphi-Quellcode:
ShowMessage(DateTimeToStr(Now + GetTimeZoneBias)+ '[UTC]');
Der Abstand zwischen UTC und Lokaler Zeit ist:
lokaleZeit - UTC = -GetTimeZoneBias
Man beachte das Minuszeichen das sich nach der Formelumstellung ergibt!!
Also alles richtig; man muss es nur richtig interpretieren:
Delphi-Quellcode:
ShowMessage('Zeitunterschied lokale Zeit zu UTC: ' +TimeToStr(-GetTimeZoneBias));


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:55 Uhr.
Seite 2 von 3     12 3      

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