Autor Beitrag
chrisw
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: Di 26.09.06 14:58 
... Bewegungen in verschiedenen Zeitzonen

Verschiedene Zeitzonen beziehen sich normalerweise auf die Greenwich Mean Time (GMT) oder auch "Null Meridian Zeit".



Um GMT zu berechnen gehen wir wie folgt vor :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
uses Windows,Sysutils....;

function GetGMT : TDateTime; 
var SystemTime : _SystemTime;
    TimeZoneInfo : Time_Zone_Information;
begin
  //aktuelle Zeitinformation (now) in wHour,wMinute,wSecond,wMillisecond vom Typ Word aufsplitten 
  DecodeTime(now,SystemTime.wHour,SystemTime.wMinute,SystemTime.wSecond,SystemTime.wMilliSeconds);
  //Zeitzoneninfo holen: Bias ist die Abweichung von aktuellen Zeit zu GMT in Minuten 
  //Beispiel bei Mitteleuropäischer Zeit (MEZ); Bias ist -60 Minuten.(GMT +1)  
  //DayLightBias ist die Abweichung von Sommerzeit zu Winterzeit in Minuten
  //Beispiel bei Mitteleuropäischer Sommerzeit (MESZ); DayLightBias ist -60 (MEZ +1) 
  GetTimeZoneInformation(TimeZoneInfo);
  //Berechnung von GMT
  SystemTime.wHour := SystemTime.wHour + TimeZoneInfo.Bias div 60 + TimeZoneInfo.DaylightBias div 60;
  // Überprüfen, ob die Stunde < 0; bzw bei Word > 65000 ; dann 24 Stunden hinzuzählen;
  if SystemTime.wHour > 65000 then SystemTime.wHour := SystemTime.wHour + 24;  
  // Überprüfen, ob die Stunde > 24 ist
  if SystemTime.wHour >= 24 then SystemTime.wHour := SystemTime.wHour -24;
  //Ausgabe des Ergebnisses und Umrechnung in Zeitinformation 
  Result := EncodeTime(SystemTime.wHour,SystemTime.wMinute,SystemTime.wSecond,SystemTime.wMilliSeconds);
end;



Ein Beispielaufruf könnte so ausssehen :

ausblenden Delphi-Quelltext
1:
  Showmessage(' Die NATO ZULU Zeit ist : ' + TimeToStr(GetGMT) + ' Uhr');					




Ebenso kann man natürlich andere Zeitzonen berechen:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function SetToNewTimeZone(Bias, DayLightBias : Integer; GMT : TDateTime) : TDateTime;
var SystemTime : _SystemTime;
    TimeZoneInfo : Time_Zone_Information;
begin
  DecodeTime(GMT,SystemTime.wHour,SystemTime.wMinute,SystemTime.wSecond,SystemTime.wMilliSeconds);
  SystemTime.wHour := SystemTime.wHour + Bias div 60 + DayLightBias div 60;
  if SystemTime.wHour > 65000 then SystemTime.wHour := SystemTime.wHour + 24;
  if SystemTime.wHour >= 24 then SystemTime.wHour := SystemTime.wHour -24;
  Result := EncodeTime(SystemTime.wHour,SystemTime.wMinute,SystemTime.wSecond,SystemTime.wMilliSeconds);
end;


Und auch hierzu ein Beispiel :
ausblenden Delphi-Quelltext
1:
2:
Showmessage('In New York ist es gerade : ' + Timetostr(SetToNewTimeZone(-300,60,GetGMT)) + ' Uhr');
//In New York beträgt die Abweichung zu GMT zur Zeit -5 und das Daylight Saving +1



Ich hoffe ich konnte mit meinem kleinen Beitrag etwas helfen


Christian Wahl

_________________
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.