AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Berechnung:Ist grade Sommerzeit in einer bestimmter Zeitzone
Thema durchsuchen
Ansicht
Themen-Optionen

Berechnung:Ist grade Sommerzeit in einer bestimmter Zeitzone

Ein Thema von TUX_der_Pinguin · begonnen am 24. Nov 2009 · letzter Beitrag vom 27. Nov 2009
Antwort Antwort
Seite 1 von 2  1 2      
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#1

Berechnung:Ist grade Sommerzeit in einer bestimmter Zeitzone

  Alt 24. Nov 2009, 15:28
Hallo,

ich bin gerade dabei ein kleines Tool zu schreiben, welches mir die aktuelle Zeit an zwei Orten auf der Welt anzeigen soll.
Der 1. Ort ist klar der Standort des Rechners also quasi das hier und jetzt. Der zweite Ort soll hingegen ein beliebiger Ort sein.

Alles soweit klein Problem die aktuelle Zeit bekommt man ja Problemlos durch "Now" geliefert. Möchte ich z.b. wissen wie
spät es jetzt in Neuseeland ist, muss ich wissen bzw. angeben in welcher Zeitzone sich der Ort befindet und ob zur zeit
Sommer oder "Winterzeit" herrscht.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  sysTime : SYSTEMTIME;
  dtRemote : TDateTime;

begin
  //Aktuelle Uhrzeit anzeigen
  lblLocalTime.Caption := FormatDateTime('hh:nn:ss', Now);

  //Aktuelle UTC Zeit ermitteln
  GetSystemTime(sysTime);

  //UTC in DateTime wandeln
  dtRemote := EncodeDateTime(sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond, sysTime.wMillisecond);

  //Zone "UTC+12 Neuseeland - Hauptgebiet" addieren
  dtRemote := IncHour(dtRemote, 12);

  //Ortszeit Neuseeland anzeigen
  lblRemoteTime.Caption := Format('hh:nn:ss', dtRemote);
Das funktioniert soweit wunderbar, jedoch ist die Zeit falsch, da zur Zeit in Neuseeland Sommerzeit (+1 Std.) ist, müsste
ich noch eine Stunde drauf rechnen, jetzt zum großen Problem.

Gibt es eine Möglichkeit an die Informationen mit Windows Bordmitteln zu gelangen oder muss ich das selbst machen.

Ich müsste jetzt mühselig "alle" Sommerzeitregelungen aus dem Internet recherchieren und durch aufwendige If-Anweisungen
herausfinden ob in der jeweiligen Zeitzone zur Zeit Sommer oder Winterzeit/Normalzeit herrscht.


Beim Beispiel von Neuseeland wäre die Regelung wie folgt.

Sommerzeit Beginn: Letzter Sonntag vor dem 1.Oktober (27.09.09)
Sommerzeit Ende: Erster Sonntag nach dem 1.April (05.04.10)

Meine Hoffnung das es irgendwie einen Trick gibt besser an die Information zu kommen.
Das ganze ist ein Delphi 2007 Prof. Projekt und sollte ab Windows XP oder höher funktionieren.

mfg

TUX
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

Re: Berechnung:Ist grade Sommerzeit in einer bestimmter Zeit

  Alt 24. Nov 2009, 15:45
Ist doch einfach
- du hast 'ne Definition "letzter Sonntag vor dem 1. Oktober"
- also nimmt man sich das Datum und sucht den Sonntag davor.

Das kann man jetzt einfach mit 'ner Schleife machen oder man versucht sich an Mathe
> DayOfWeek oder DayOfTheWeek und dann rechnen

Delphi-Quellcode:
T := TDateTime(1. Oktober des Jahres) - 1;
T := T - (6 - DayOfWeek(T));
(vermutlich)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#3

Re: Berechnung:Ist grade Sommerzeit in einer bestimmter Zeit

  Alt 24. Nov 2009, 15:48
Hi,

...aber immer bedenken, dass die wenigsten Länder die Sommerzeit kennen


Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Berechnung:Ist grade Sommerzeit in einer bestimmter Zeit

  Alt 24. Nov 2009, 16:07
Zitat von himitsu:
Ist doch einfach
Nur leider nicht weltweit einheitlich und das ist sein Problem.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Berechnung:Ist grade Sommerzeit in einer bestimmter Zeit

  Alt 24. Nov 2009, 16:07
Zitat von himitsu:
Ist doch einfach
- du hast 'ne Definition "letzter Sonntag vor dem 1. Oktober"
- also nimmt man sich das Datum und sucht den Sonntag davor.

Das kann man jetzt einfach mit 'ner Schleife machen oder man versucht sich an Mathe
> DayOfWeek oder DayOfTheWeek und dann rechnen

Delphi-Quellcode:
T := TDateTime(1. Oktober des Jahres) - 1;
T := T - (6 - DayOfWeek(T));
(vermutlich)
Das war mir schon klar, das ich die Regel "nur" umsetzten brauche. Ich hatte mich nur gefragt ob mir das evtl. Windows nicht
selber sagen kann, um mir den Aufwand zu sparen für alle Länder/Zeitzonen mit Sommerzeit solch eine Abfrage zu bauen. Da sich
solche Sachen ja auch mal ändern können. Ich hatte mal gesehen das Win XP Änderung an irgendwelchen Zeitregelungen per Update
mitgeteilt worden sind, dann würde mein Programm solange "richtig" laufen wie Windows XP selbst korrekt die Zeitumstellungen
kennt.

Windows müsste das doch selbst wissen nur ich frag mich wie ich an diese Information heran komme, ich hatte schon überlegt ob
man die System-Zeitzone auf die gewünschte ändert und dann eine Abfrage macht ob Sommerzeit aktiv ist oder nicht. Besonders
elegant fände ich das zwar nicht, aber selbst diese Lösung wüsste ich gerade nicht zu realisieren.

Ich denke und befürchte ich komme um ein "Gebilde" wie folgt nicht herum.
Zitat:
function IsSummerTime(Zone);

case ZeitZone of
Neuseeland : begin
//Regelung Siehe oben
result := True;
end;

Europa : begin
....
result := False;
end;
end;

....
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#6

Re: Berechnung:Ist grade Sommerzeit in einer bestimmter Zeit

  Alt 24. Nov 2009, 16:22
OK, hatter verstanden, daß du es selber errechnen willst.

Du könntest dich mit einem Time-Server in Verbindung setzen und dieses fragen.


MSDN-Library durchsuchenmsdn sommerzeit
http://msdn.microsoft.com/de-de/magazine/cc163425.aspx
http://www.google.de/url?q=http://ms.../bb979254.aspx
http://www.google.de/url?q=http://ms.../bb978960.aspx
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
655 Beiträge
 
Delphi 12 Athens
 
#7

Re: Berechnung:Ist grade Sommerzeit in einer bestimmter Zeit

  Alt 24. Nov 2009, 16:29
Also prinzipiell müsste Windows die Infos ja wirklich haben. Allerdings habe ich es bisher nur gebraucht, um die aktuell eingestellte Zeitzone nach UTC zu konvertieren, prinzipiell sollte es damit aber auch möglich sein, zwischen verschiedenen Zonen hin und her zu wandeln. Guck zum Beispiel nach Delphi-Referenz durchsuchenTzSpecificLocalTimeToSystemTime und hangele dich von da aus durch.

Einige dieser Zeit-Funktionen von Windows sind in Delphi nicht von Haus aus vorhanden, so dass du sie erst selbst importieren musst, zum Beispiel:
Delphi-Quellcode:
[...]
implementation

function TzSpecificLocalTimeToSystemTime; external kernel32 name 'TzSpecificLocalTimeToSystemTime';
Vielleicht findest du ja mit diesen Geschichten bei MSDN etwas. Auf jeden Fall hat Windows die nötigen Infos...

Bis denn
Bommel

Edit: Kleiner Nachtrag... Such mal in dem oben erwähnten MSDN-Artikel nach dem Abschnitt "Remarks: Settings for each time zone are stored in the following registry key:" - Da wirst du dann die nötigen Infos finden. Es wird also wohl nicht einfach, aber es scheint zu gehen.
  Mit Zitat antworten Zitat
Benutzerbild von hazard999
hazard999

Registriert seit: 2. Okt 2008
38 Beiträge
 
#8

Re: Berechnung:Ist grade Sommerzeit in einer bestimmter Zeit

  Alt 24. Nov 2009, 17:24
Ich hab die andere Richtung, vielleicht hilfts:

Delphi-Quellcode:
   function UTCToLocalTime(dateTime: TDateTime): TDateTime;
   var
      Info: TTimeZoneInformation;
      Status: DWORD;
   begin
      Status := GetTimeZoneInformation(Info);
      if (Status = TIME_ZONE_ID_UNKNOWN) or (Status = TIME_ZONE_ID_INVALID) then
         raise Exception.Create('Zeitzone ungültig');

      result := IncHour(dateTime, (Info.Bias div 60) * -1);
      result := IncMinute(result, (Info.Bias - ((Info.Bias div 60) * 60)) * -1);
      if Status = TIME_ZONE_ID_DAYLIGHT then
      begin
         result := IncHour(result, (Info.DaylightBias div 60) * -1);
         result := IncMinute(result, (Info.DaylightBias - ((Info.DaylightBias div 60) * 60)) * -1);
      end;
   end;
lg

hazard
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Berechnung:Ist grade Sommerzeit in einer bestimmter Zeit

  Alt 25. Nov 2009, 09:54
Hmm alles soweit ganz gut, man fühlt sich kurz vor dem Ziel, weil alles was man eigentlich braucht ist die vorhandene
Funktion "GetTimeZoneInformation" jedoch nicht fest mit der aktuellen sondern mit einer beliebigen Zeitzone. Mein Ansatz
ist erst mal eine Liste aller Zeitzonen zu bekommen die jeweils aus der TIME_ZONE_INFORMATION Struktur besteht.

Nur wie weiß ich noch nicht so ganz wie ich an diese Liste kommen soll.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#10

Re: Berechnung:Ist grade Sommerzeit in einer bestimmter Zeit

  Alt 25. Nov 2009, 10:02
Eventuell findest du ja über Bei Google suchenenumerate timezone etwas,
ansonsten kannst du immernoch die Registry auslesen (Pfad siehe MSDN-Library durchsuchenGetTimeZoneInformation)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:58 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