Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi Datum auf Fehler prüfen - Deutsches Datumsformat (https://www.delphipraxis.net/140628-datum-auf-fehler-pruefen-deutsches-datumsformat.html)

Wolfgang Mix 22. Sep 2009 14:14


Datum auf Fehler prüfen - Deutsches Datumsformat
 
Hallo Profis

Überlege gerade, wie ich mit 'ner kurzen Funktion ein Datum auf Plausibilität prüfen kann.
Vorab mein Brainstorming:
Soll bei deutschem Datum funktionieren.

Delphi-Quellcode:
function IsDateOk(d,m,y:integer):boolean;
begin
  result:=true;
  //try
  EncodeDate(y,m,d);
  //OnError.. result:=false
  //except ...
  //finally
end;

procedure TForm1.Button1Click(Sender: TObject);
var test:boolean;
begin
  test:=IsDateOk(30,2,-1);
  Edit1.Text:=BoolToStr(test);
end;

end.
Wird das ungefähr so hinhauen oder muß ich das Datum selber zerpflücken?
EncodeDtate bringt ja schöne Abstürze bei inkorrekten Übergabewerten.

Gruß

Wolfgang

BackOrifice 22. Sep 2009 14:23

Re: Datum auf Fehler prüfen - Deutsches Datumsformat
 
Ich weiß, dass ist keine direkte Antwort auf deine Frage, aber:

.. was hälst du von TDateTimePicker? Mit der Eigenschaft "nur Datum" ziemlich nützlich, denn der Benutzer kann keine falschen Daten eintragen.

//Edit: Du kannst natürlich auch alles manuell grundlegend prüfen: Tag >= 1 und <= 31, Monat >= 1 und <= 12 usw. Danach in EncodeDate reinhalten. Keine Ahnung, obs funktioniert :mrgreen:

mkinzler 22. Sep 2009 14:29

Re: Datum auf Fehler prüfen - Deutsches Datumsformat
 
Delphi-Quellcode:
If StrToDateDef( <string>, <default>, Format) = <Default> then // Datum im Strig nicht korrekt

Wolfgang Mix 22. Sep 2009 14:31

Re: Datum auf Fehler prüfen - Deutsches Datumsformat
 
@BackOrifice

BackOrifice hat geschrieben:

Zitat:

.. was hälst du von TDateTimePicker? Mit der Eigenschaft "nur Datum" ziemlich nützlich, denn der Benutzer kann keine falschen Daten eintragen.
Garnix, andere Datumroutinen sollen erst gestartet werden, wenn das Datum okay ist.

Trotzdem danke

Wolfgang

mirage228 22. Sep 2009 14:41

Re: Datum auf Fehler prüfen - Deutsches Datumsformat
 
Gibts nicht auch Delphi-Referenz durchsuchenTryStrToDateTime ?

Nersgatt 22. Sep 2009 14:54

Re: Datum auf Fehler prüfen - Deutsches Datumsformat
 
Ja, es gibt tryStrToDate.

Kleines Beispiel für Wolfgang:
Delphi-Quellcode:
var str : string;
    d : TDateTime;
begin

  str := InputBox('Datum', 'Bitte geben sie ein Datum ein', '');
  if tryStrToDate(str, d) then
  begin
    showMessage('Sie haben ' + FormatDateTime('ddd, dd. MMMM yyyy', d) + ' eingegeben')
  end;

end;

Wolfgang Mix 22. Sep 2009 18:36

Re: Datum auf Fehler prüfen - Deutsches Datumsformat
 
@Nersgatt

Danke, da bringt mich schon weiter nach vorn.
Der Code scheint sogar absturzfest zu sein ;-)
Hast Du noch die Variante mit dem internationalen Format?
Jetzt muß ich mir nur noch den Datumsstring basteln. :-)

Gruß

Wolfgang

Nersgatt 22. Sep 2009 19:15

Re: Datum auf Fehler prüfen - Deutsches Datumsformat
 
Der Code arbeitet sowohl auf einem Deutschen Windows, als auch auf einem Englischen Windows korrekt. Halt je nach Einstellung des Systems.
Geh mal in die Systemsteuerung -> "Regions- und Sprachoptionen" und stell Deinen PC z.B. auf Englisch um. Und dann probiere den Codeschipsel noch mal aus.

Jens

Wolfgang Mix 22. Sep 2009 19:16

Re: Datum auf Fehler prüfen - Deutsches Datumsformat
 
Mein vorlaüfiges Zwischenergebnis sieht jatzt so aus:
Wie ich Euch kenne, ist der Code noch optimierbar ;-)
Zumindest funktioniert es so erst einmal.

Delphi-Quellcode:
//Wolfgang Mix - Delphi-PRAXiS
//Gültigkeitsbereich 1.1.0001 ... 31.12.9999
function IsDateOk(d,m,y:integer):boolean;
var ds,ms,ys,dates:string;
    d1:TDateTime;
begin
  result:=false;
  //Nullen davor, wenn <10
  str(d,ds);if d<10 then ds:='0'+ds;
  str(m,ms);if m<10 then ms:='0'+ms;
  str(y,ys);
  //Jahr immer 4-stellig
  while length(ys)<4 do ys:='0'+ys;
  dates:=ds+'.'+ms+'.'+ys;
  //Dank Nersgatt - DP
  if tryStrToDate(dates,d1) then result:=true;
end;


procedure TForm1.Button1Click(Sender: TObject);
Begin
  Edit1.Text:=BoolToStr(IsDateOk(25,13,1950));
end;
Gruß

Wolfgang

Wolfgang Mix 22. Sep 2009 19:19

Re: Datum auf Fehler prüfen - Deutsches Datumsformat
 
@Nersgatt

Prima, nochmal danke :-)

Gruß

Wolfgang


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:03 Uhr.
Seite 1 von 2  1 2      

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