Einzelnen Beitrag anzeigen

Maekkelrajter

Registriert seit: 8. Mär 2017
Ort: Köln
157 Beiträge
 
Delphi 12 Athens
 
#44

AW: CMD mit Output

  Alt 1. Apr 2019, 13:18
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
  Mit Zitat antworten Zitat