Difference between revisions of "Daylight saving time/de"

From Free Pascal wiki
Jump to navigationJump to search
m
m
Line 3: Line 3:
 
<br>
 
<br>
 
Sommerzeitberechnung der Bundesrepublik Deutschland ab dem Jahr 1981.<br>
 
Sommerzeitberechnung der Bundesrepublik Deutschland ab dem Jahr 1981.<br>
 +
Die Funktion prüft, ob das übergebene Datum in der Sommerzeit liegt (Rückgabewert: True).<br>
 
<syntaxhighlight>
 
<syntaxhighlight>
 
function funIstSommerzeit(Datum: TDateTime): boolean;
 
function funIstSommerzeit(Datum: TDateTime): boolean;

Revision as of 07:21, 16 July 2013

Template:Summertime

Sommerzeitberechnung der Bundesrepublik Deutschland ab dem Jahr 1981.
Die Funktion prüft, ob das übergebene Datum in der Sommerzeit liegt (Rückgabewert: True).

function funIstSommerzeit(Datum: TDateTime): boolean;
var
  wrdJahr: word;
  wrdMonat: word;
  wrdTag: word;
  datSommerzeit: TDatetime;
  datWinterzeit: TDateTime;

begin

  Result := False;

  DecodeDate(Datum, wrdJahr, wrdMonat, wrdTag);
  if wrdJahr < 1981 then
    exit;

  // Beginn der Sommerzeit:
  // letzter Sonntag im März um 2:00 Uhr
  datSommerzeit := EncodeDate(wrdJahr, 3, 31);
  datSommerzeit := datSommerzeit - (DayOfWeek(datSommerzeit) - 1) +
    Frac(StrToTime('02:00'));

  // Ende der Sommerzeit:
  // von 1981 bis 1995 letzter Sonntag im September um 3:00 Uhr
  // ab 1996 letzter Sonntag im Oktober um 3:00 Uhr
  if wrdJahr <= 1995 then
    datWinterzeit := EncodeDate(wrdJahr, 9, 30)
  else
    datWinterzeit := EncodeDate(wrdJahr, 10, 31);

  datWinterzeit := datWinterzeit - (DayOfWeek(datWinterzeit) - 1) +
    Frac(StrToTime('03:00'));

  Result := (Datum >= datSommerzeit) and (Datum < datWinterzeit);

end;


Beispiel für einen Aufruf der Funktion unter Windows:

function funTest: string;
begin

  if funIstSommerzeit(StrToDateTime('10.10.1990 14:34:56')) = False then
    Result := 'Normalzeit'
  else
    Result := 'Sommerzeit';

end;


Beispiel für einen Aufruf der Funktion unter Linux (Ubuntu):

function funTest: string;
begin

  // Mann beachte im Vergleich zu Windows die unterschiedliche Schreibweise des Datums
  // unter Windows erwartet StrToDateTime die Schreibweise des Datums dd-mm-yyyy
  // unter Linux (Ubuntu) erwartet StrToDateTime die Schreibweise des Datums d-m-yy
  if funIstSommerzeit(StrToDateTime('10-10-90 14:34:56')) = False then
    Result := 'Normalzeit'
  else
    Result := 'Sommerzeit';

end;



--Olaf 05:17, 16 July 2013 (UTC)