Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wie ermittle ich, welche Zeitzone (Sommer/Winter) z.Zt. ist? (https://www.delphipraxis.net/4544-wie-ermittle-ich-welche-zeitzone-sommer-winter-z-zt-ist.html)

Framige 4. Mai 2003 01:49


Wie ermittle ich, welche Zeitzone (Sommer/Winter) z.Zt. ist?
 
Tag auch,
wie kann ich feststellen, welche Zeitzone (Sommerzeit oder Winterzeit) momentan gültig ist?

Danke euch fürs erste ...

Christian Seehase 4. Mai 2003 02:27

Moin Framige,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Zu Deinem Problem:
Schau Dir doch mal die API Funktion GetTimeZoneInformation an.
Das müsste genau das richtige für Dich sein.

Framige 4. Mai 2003 10:40

Moin Christian,
erst einmal danke für die Begrüßung. Ich bin Novize, was Delphi angeht, arbeite aber schon seit 12 Jahren mit BorlandPascal. Von daher fehlt mir eigentlich nur der Überblick, wie ich was und wo einbinde. Und natürlich die ganzen Möglichkeiten, die Delphi so bietet. Ich glaube, ich mach mal einen Einführungskurs irgendwo mit.
Na dann muß ich mal schauen, wie ich diese API einbinden kann.

TX

P.S. Das Moin kommt mir sehr bekannt vor, habe fast 21 Jahre in FL gelebt.

Christian Seehase 4. Mai 2003 13:11

Moin Framige,

viele API Funktionen brauchst Du nicht selber einzubinden, sie befinden sich in diversen Units, die Delphi mitbringt. Meist heissen diese so wie die zugehörige Headerdatei. Was in WINBASE.H usw. deklariert ist, dürfte sich wohl in der Unit Windows befinden, die eh' standardmässig eingebunden wird. GetTimeZoneInformation ist dort zu finden.

I.d.R. werden bei Delphi keine Deklarationen mitgeliefert, die in unterschiedlichen Betriebbsystemversionen unterschiedlich deklariert werden müssen, bzw. die es nur für die NT Schiene gibt.

Specialwork 4. Mai 2003 22:55

Hallo Framige,

Das geht so !

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure Logg(Value: String);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Logg(Value: String);
begin
  Memo1.Lines.Add(Value);
end;

procedure TForm1.Button1Click(Sender: TObject);
var TimeZoneInformation: TTimeZoneInformation;
begin
  GetTimeZoneInformation(TimeZoneInformation);
 
  Logg(inttostr(TimeZoneInformation.Bias));
  Logg(String(TimeZoneInformation.StandardName));
  Logg(String(TimeZoneInformation.DaylightName));

  // ... usw.
end;

end.

Gruß, Tom

:bounce1:

Framige 8. Mai 2003 22:35

@Specialwork
Specialdank für die Unterstützung.
Echt Klasse hier, das man so schnell Lösungen erhält.

little_budda 25. Mär 2008 16:13

Re: Wie ermittle ich, welche Zeitzone (Sommer/Winter) z.Zt.
 
Hallo,

ich habe den letzten Tipp verwendet.
Das Resultat ist:

-60
Westeuropäische Normalzeit
Westeuropäische Sommerzeit

Woran bitte erkenne ich denn nun das bei mir aktuell noch Winterzeit herscht?
Oder dass nächste Woche Sommerzeit ist?

Gruß Holger.

:gruebel:

toms 25. Mär 2008 16:32

Re: Wie ermittle ich, welche Zeitzone (Sommer/Winter) z.Zt.
 
Aus der unit SRUtils von Simon Reinhardt:

Delphi-Quellcode:
function IsSummertime(ADate:TDateTime):boolean;
var AYear,
    AMonth,
    ADay : word;
    Beginn,
    Ende : TDateTime;
begin
  try
    ADate := trunc(ADate);
    DecodeDate(ADate, AYear, AMonth, ADay);
    if AYear < 1980 then
      { Keine Sommerzeit vor 1980 }
      Result := False
    else begin
      { Beginn der Sommerzeit: }
      Beginn := EncodeDate(AYear, 3, 31);
      while DayOfWeek(Beginn) <> 1 do
        Beginn := Beginn-1;
      { Ende der Sommerzeit: }
      if AYear <= 1995 then
        { bis 1995: letzter So im September }
        Ende := EncodeDate(AYear, 9, 30)
      else
        { ab 1996: letzter So im Oktober }
        Ende := EncodeDate(AYear, 10, 31);
      while DayOfWeek(Ende) <> 1 do
        Ende := Ende - 1;
      Result := (ADate>=Beginn) and (ADate<Ende);
    end;
  except
    Result := False;
  end;
end; {IsSummertime}

little_budda 25. Mär 2008 16:40

Re: Wie ermittle ich, welche Zeitzone (Sommer/Winter) z.Zt.
 
Danke.
Funktioniert.

OregonGhost 25. Mär 2008 16:44

Re: Wie ermittle ich, welche Zeitzone (Sommer/Winter) z.Zt.
 
Das gepostete IsSummertime funktioniert aber nicht überall, oder?

GetTimeZoneInformation liefert doch folgenden Rückgabewert:
Zitat:

TIME_ZONE_ID_UNKNOWN 0 Daylight saving time is not used in the current time zone, because there are no transition dates.

TIME_ZONE_ID_STANDARD 1 The system is operating in the range covered by the StandardDate member of the TIME_ZONE_INFORMATION structure.

Windows Me/98/95: This value is returned if daylight saving time is not used in the current time zone, because there are no transition dates.
TIME_ZONE_ID_DAYLIGHT 2 The system is operating in the range covered by the DaylightDate member of the TIME_ZONE_INFORMATION structure.

Darüber hinaus steht in der Struktur drin, wann es damit los geht und wann es aufhört. Damit funktioniert das auch außerhalb von Mitteleuropa. Die allgemeineren Funktionen GetDynamicTimeZoneInformation und GetTimeZoneInformationForYear stehen erst ab Vista bzw. Vista SP1 zur Verfügung, wären aber noch besser, weil sie weitere Gegebenheiten berücksichtigen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr.
Seite 1 von 2  1 2      

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