![]() |
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:
Wird das ungefähr so hinhauen oder muß ich das Datum selber zerpflücken?
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. EncodeDtate bringt ja schöne Abstürze bei inkorrekten Übergabewerten. Gruß Wolfgang |
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: |
Re: Datum auf Fehler prüfen - Deutsches Datumsformat
Delphi-Quellcode:
If StrToDateDef( <string>, <default>, Format) = <Default> then // Datum im Strig nicht korrekt
|
Re: Datum auf Fehler prüfen - Deutsches Datumsformat
@BackOrifice
BackOrifice hat geschrieben: Zitat:
Trotzdem danke Wolfgang |
Re: Datum auf Fehler prüfen - Deutsches Datumsformat
Gibts nicht auch
![]() |
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; |
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 |
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 |
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:
Gruß
//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; Wolfgang |
Re: Datum auf Fehler prüfen - Deutsches Datumsformat
@Nersgatt
Prima, nochmal danke :-) Gruß Wolfgang |
Re: Datum auf Fehler prüfen - Deutsches Datumsformat
Wenn Du das Datum als String vorliegen hast, bietet sich TryStrToDate an. Dann würde ich nicht daraus einen Datumsstring zusammenbasteln und dann prüfen, sondern die Elemente einzeln prüfen. Das ist wie links blinken und rechts abbiegen :mrgreen: Mit Deiner Funktion bekommst Du bei einem Englischen Windows Probleme.
Ich würde die Elemente einzeln prüfen:
Delphi-Quellcode:
(DateUtils muss für DaysInAMonth eingebunden werden)
//Gültigkeitsbereich 1.1.0001 ... 31.12.9999
function IsDateOk(d,m,y:integer):boolean; begin if (y < 1) or (y > 9999) then result := False else if (m < 1) or (m > 12) then result := false else if (d < 1) or (d > DaysInAMonth(y, m)) then result := false else result := True; end; Jens |
Re: Datum auf Fehler prüfen - Deutsches Datumsformat
Verstehe auch nicht, was das wandeln in Strings soll.
Delphi-Quellcode:
function IsDateOk(d,m,y:Word):boolean;
begin Try EncodeDate(Y,M,D); Result := True; Except Result := False; End; end; |
Re: Datum auf Fehler prüfen - Deutsches Datumsformat
Zitat:
Ich würde eher hierzu tendieren, da spart man sich die Exceptions.
Delphi-Quellcode:
Merke: Die Delphi-Utilities können ne ganze Menge. Man muss nicht mehr viel selbst basteln.
If TryEncodeDate(Year, Month, Day, TheDate) Then
ShowMessage(Format('Das Datum %s ist korrekt',[DateToStr(TheDate)])); |
Re: Datum auf Fehler prüfen - Deutsches Datumsformat
Danke für die Antworten ;-)
Das ist mit der Variante von alzaimar jetzt übrig geblieben:
Delphi-Quellcode:
Gruß
function IsDateOk(d,m,y:word):boolean;
var mydate:TDateTime; begin result:=false; mydate:=EncodeDate(y,m,d); If TryEncodeDate(y,m,d,myDate) Then result:=true end; procedure TForm4.Button1Click(Sender: TObject); begin Edit1.Text:=BoolToStr(IsDateOk(32,12,1)); end; end. Wolfgang |
Re: Datum auf Fehler prüfen - Deutsches Datumsformat
Warum nicht einfach so:
Delphi-Quellcode:
:roll:
function IsDateOk(d,m,y:word):boolean;
var mydate:TDateTime; begin result := TryEncodeDate(y,m,d,myDate); end; |
Re: Datum auf Fehler prüfen - Deutsches Datumsformat
Zitat:
|
Re: Datum auf Fehler prüfen - Deutsches Datumsformat
Meine OH gibt folgende Auskunft:
Zitat:
Gruß Wolfgang |
Re: Datum auf Fehler prüfen - Deutsches Datumsformat
Aber mydate ist vom Typ TDateTime :zwinker:
|
Re: Datum auf Fehler prüfen - Deutsches Datumsformat
Hast wieder 'mal Recht :-)
[OT] Opa Detlef muß immer das letzte Wort haben [/OT] ;-) Gruß Wolfgang |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 Uhr. |
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