Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Datumsvergleich im Quelltext vereinfachen (https://www.delphipraxis.net/214713-datumsvergleich-im-quelltext-vereinfachen.html)

BerndS 26. Feb 2024 10:19

Datumsvergleich im Quelltext vereinfachen
 
Hallo,
ab und an kommt es vor, dass bestimmte Funktionen erst später aktiviert werden sollen.
Als Beispiel das SEPA Format 3.7.
Was natürlich geht aber nicht optimal ist:

Delphi-Quellcode:
 if (Date > StrToDate('17.3.2024')) then
  ...
Solche Strings möchte ich aber im Quelltext nicht haben und ich lasse mir mit einem Miniprogramm das umrechnen.

Schöner wäre es, wenn man im Editor die Möglichkeit hätte, diesen String bereits in einen TDate zu wandeln.
Ich habe MMX, GExpert und cnPack installiert, hier aber keine Option dafür gefunden.

Als Lösung könnte ich mir vorstellen, dass ich den string markiere und dann eine Erweiterung diese Markierung in den TDate konvertiert.

'17.3.2024' -> 45368 {17.3.2024}

Vieleicht sucht ja ein Expertenentwickler noch nach neuen Features.

hotrs02 26. Feb 2024 10:39

AW: Datumsvergleich im Quelltext vereinfachen
 
Wäre die Verwendung von EncodeDate eine Alternative?

Delphi-Quellcode:
  if Date > EncodeDate(2024, 03, 17) then

BerndS 26. Feb 2024 12:55

AW: Datumsvergleich im Quelltext vereinfachen
 
Das ist eine Alternative, die aber auch zusätzlichen Code erzeugt, den ich möglichst vermeiden wollte.

dummzeuch 26. Feb 2024 13:39

AW: Datumsvergleich im Quelltext vereinfachen
 
StrToDate und auch EncodeDate kann man auch im Evaluate / Modify Fenster beim Debugging aufrufen. Vielleicht reicht das ja schon? Ansonsten ist ein passendes Programm dafür in 2 Minuten geschrieben.

BerndS 26. Feb 2024 14:02

AW: Datumsvergleich im Quelltext vereinfachen
 
Das Programm hab ich ja bereits, aber wenn es direkt in Editor per z.B. rechter Maustaste ginge, wäre es komfortabler.

Uwe Raabe 26. Feb 2024 14:11

AW: Datumsvergleich im Quelltext vereinfachen
 
Zitat:

Zitat von BerndS (Beitrag 1533883)
Das ist eine Alternative, die aber auch zusätzlichen Code erzeugt, den ich möglichst vermeiden wollte.

Den zusätzlichen Code kann man ja vermeiden 8-)
Delphi-Quellcode:
const
  day = 17;
  month = 3;
  year = 2024;

{$REGION 'calculate _date'}
  _monthdays = Ord((month > 1))*31 +
               Ord((month > 2))*(28 + ord(year mod 4 = 0)) +
               Ord((month > 3))*31 +
               Ord((month > 4))*30 +
               Ord((month > 5))*31 +
               Ord((month > 6))*30 +
               Ord((month > 7))*31 +
               Ord((month > 8))*31 +
               Ord((month > 9))*30 +
               Ord((month > 10))*31 +
               Ord((month > 11))*30;
  _year = year - 1;
  _date = _year * 365 + _year div 4 - _year div 100 + _year div 400 + _monthdays + Day - DateDelta;
{$ENDREGION}

  TheSpecialDate = _date;

dummzeuch 26. Feb 2024 14:16

AW: Datumsvergleich im Quelltext vereinfachen
 
Zitat:

Zitat von BerndS (Beitrag 1533887)
Das Programm hab ich ja bereits, aber wenn es direkt in Editor per z.B. rechter Maustaste ginge, wäre es komfortabler.

Dann kann ich Dich nur einladen, die entsprechende Funktion in GExperts zu implementieren. Ich bin gerne bereit, sie als Patch zu integrieren. Ist ja kein Hexenwerk.

BerndS 26. Feb 2024 14:39

AW: Datumsvergleich im Quelltext vereinfachen
 
Zitat:

Dann kann ich Dich nur einladen, die entsprechende Funktion in GExperts zu implementieren. Ich bin gerne bereit, sie als Patch zu integrieren. Ist ja kein Hexenwerk.
Ok, dass könnte ich mal versuchen.

hoika 26. Feb 2024 17:42

AW: Datumsvergleich im Quelltext vereinfachen
 
Hallo,
wie wäre es, wenn Du diese Variablen in eine Konfig-Datei auslagerst?

jaenicke 26. Feb 2024 18:59

AW: Datumsvergleich im Quelltext vereinfachen
 
Ich finde es nicht sinnvoll, wenn man im Code nicht direkt sehen und prüfen kann, was passiert. Der Kommentar schützt davor nicht, denn der kann ja auch falsch sein.

Deshalb würde ich immer die korrekten menschenlesbaren Werte verwenden und mit dem schon genannten EncodeDate regionsunabhängig (deshalb kein String) umwandeln.

himitsu 26. Feb 2024 19:23

AW: Datumsvergleich im Quelltext vereinfachen
 
Schade, dass Delphi keinen Precompiler mehr ermöglicht und Emba sich weigert zumindestens eine einfache Variante von Makros zu ermöglichen.

Man könnte sich auch einen neuen Datumstypen oder eine Funktion delarieren, welcher den String (immer mit dem selben FormatSetting) oder einen Integer entgegen nimmt.
Dank der neuen Formatierungen im Quellcode, lässt es sich selbst als Integer problemlos lesen.
26_02_2024 oder 2024_02_26 (dann noch bissl DIV, MOD und EncodeDate)

freimatz 27. Feb 2024 06:49

AW: Datumsvergleich im Quelltext vereinfachen
 
:shock: Ich dagegen bin sehr froh dass es in Delphi keinen Preprozessor wie in C gibt.:thumb:
Die paar Bytes mehr finde ich vernachlässigbar - vor allem gegenüber dem was aktuelle Delphiversionen eh schon mitbringen.

Sinspin 27. Feb 2024 07:11

AW: Datumsvergleich im Quelltext vereinfachen
 
Ich verwende für sowas EncodeDate.
Das ist sicher, funktioniert auf allen Systemen und mit allen Settings.

Wo Strings umgewandelt werden muss man sehr aufpassen woher die Formatsettings kommen. Das ist eine schöne Fehlerquelle wenn das Programm mal unter UK oder US Datumseinstellungen läuft.

BerndS 27. Feb 2024 07:15

AW: Datumsvergleich im Quelltext vereinfachen
 
Die neue Schreibweise die himitsu erwähnte, kann ich noch nicht verwenden, da XE7 noch eingesetzt wird. D12 soll aber bald auch für den Buildprozess verwendet werden.

Daher werde ich das dann bis dahin so lösen:
Delphi-Quellcode:
function CompareWithDate(Value: Integer): Integer;
...
Als Value wird dann statt '17.03.2024' ein Integer 20240317 übergeben. Dadurch wird der Zusätzliche Code nur einmal erstellt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz