Daylight saving time/de

From Lazarus wiki
Jump to navigationJump to search

Deutsch (de)

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:

uses
...DateUtils...

function funTest: string;
begin

  // 10. Oktober 1990, 14:34:56
  if funIstSommerzeit(EncodeDateTime(1990,10,10,14,34,56,00);) = False then
    Result := 'Normalzeit'
  else
    Result := 'Sommerzeit';

end;