Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   CMD mit Output (https://www.delphipraxis.net/199970-cmd-mit-output.html)

Delphi.Narium 1. Apr 2019 09:02

AW: CMD mit Output
 
Man nehme als Zeit grundsätzlich GMT und rechne für die Anzeige ggfls. nach den aktuelle gültigen Regeln, Zeitzonen ... um.

Ansonsten braucht man halt die Information, wann und wo es überhaupt irgendwelche Zeitumstellungen gab oder gibt, bzw. den / die zur Umrechnung erforderlichen Algorithmus / Algorithmen.

Mit rein mathematischen Methoden oder purer Logik kommt man da nicht zum Ziel.
Ohne "Wissensbasis" geht da nix.

Rollo62 1. Apr 2019 09:19

AW: CMD mit Output
 
Ja, das meine ich, mit Regeln wie in meinem Link s.u.
Gibt es da vielleicht schon etwas Fertiges, oder einen allgemeingültigen Shortcut ?

Delphi.Narium 1. Apr 2019 09:44

AW: CMD mit Output
 
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.

Suchmaschine Deiner Wahl mal mit Bei Google suchenalgorithmus zeitberechnung zeitumstellung füttern und dann stöbern, es gibt vieles, interessantes, wissenswerte, unwichtiges ...

Eventuell ein Ansatz: http://www.zeitumstellung.de/

Maekkelrajter 1. Apr 2019 12:18

AW: CMD mit Output
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1429208)
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
Delphi-Quellcode:
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 Uhr.
Seite 5 von 5   « Erste     345   

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-2025 by Thomas Breitkreuz