Da es sich um veränderliche Regeln handelt, kann es nichts allgemeingültiges geben.
Es könnte allenfalls etwas geben, das einen bestimmten Zeitrahmen abdeckt.
... und für ein bestimmtes Land gilt
Hier
https://www.entwickler-ecke.de/topic...t+_2926,0.html ist eine Routine zu finden, die True zurückgibt, wenn ein Datum in der Sommerzeit liegt (nur BRD/DE seit 1980).
Delphi-Quellcode:
function CheckBRDSz(Datum: TDateTime): Boolean;
var
y, m, d : Word;
sDat, eDat : TDateTime;
begin
DecodeDate(Datum, y, m, d);
if y < 1981 then
Result := False
else begin
sDat := EncodeDate(y, 3, 31);
sDat := sDat - (DayOfWeek(sDat) - 1) + Frac(StrToTime('02:00'));
eDat := EncodeDate(y, 10 - Word(y <= 1995), 31 - Word(y <= 1995));
eDat := eDat - (DayOfWeek(eDat) - 1) + Frac(StrToTime('03:00'));
Result := (Datum >= sDat) and (Datum < eDat);
end;
end
Den Code halte ich allerdings für verbesserungsfähig. U.a. halte ich es für gewagt, word(true) als +1 anzunehmen. Auch sollte ein Ausdruck wie
Frac(StrToTime('02:00')
nicht zur Laufzeit ausgewertet werden, vor allem, wenn der Code in Schleifen verwendet werden soll. Auch könnte man das Ganze flexibler gestalten indem man, anstatt Konstante zu verwenden, eine Länderspezifische Struktur mit Anfangs- und Enddatum + Uhrzeit, Geltungszeitraum usw. übergeben würde.
Ich verwende den Code, wenn ich an iTunes via
COM-Interface ein Datum + Uhrzeit (z.B. 'Zuletzt gespielt') übergebe und aktuelles Datum ('now') und übergebenes Datum nicht im gleichen Zeitbereich (MEZ oder MESZ) liegen. In diesem Fall wird nämlich von iTunes je nach 'Richtung' ungefragt eine Stunde addiert bzw. subtrahiert.
Gruß LP