Delphi-PRAXiS
Seite 2 von 2     12   

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)

Nersgatt 23. Sep 2009 06:23

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:
//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;
(DateUtils muss für DaysInAMonth eingebunden werden)

Jens

Zoot 23. Sep 2009 07:12

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;

alzaimar 23. Sep 2009 07:20

Re: Datum auf Fehler prüfen - Deutsches Datumsformat
 
Zitat:

Zitat von Zoot
Verstehe auch nicht, was das wandeln in Strings soll.

Da wird nix in Strings verwandelt, sondern in TDateTime. Und vor dem Konvertieren wird eine Gültigkeitsprüfung vorgenommen.

Ich würde eher hierzu tendieren, da spart man sich die Exceptions.
Delphi-Quellcode:
If TryEncodeDate(Year, Month, Day, TheDate) Then
  ShowMessage(Format('Das Datum %s ist korrekt',[DateToStr(TheDate)]));
Merke: Die Delphi-Utilities können ne ganze Menge. Man muss nicht mehr viel selbst basteln.

Wolfgang Mix 23. Sep 2009 08:11

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:
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.
Gruß

Wolfgang

Nersgatt 23. Sep 2009 08:13

Re: Datum auf Fehler prüfen - Deutsches Datumsformat
 
Warum nicht einfach so:
Delphi-Quellcode:
function IsDateOk(d,m,y:word):boolean;
var mydate:TDateTime;
begin
    result := TryEncodeDate(y,m,d,myDate);
end;
:roll:

BackOrifice 23. Sep 2009 08:58

Re: Datum auf Fehler prüfen - Deutsches Datumsformat
 
Zitat:

Zitat von Wolfgang Mix
Danke für die Antworten ;-)
Das ist mit der Variante von alzaimar jetzt übrig geblieben:

Delphi-Quellcode:
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.
Gruß

Wolfgang

Öh, was macht dein "mydate:=EncodeDate(y,m,d);" an dieser Stelle? Wozu? :gruebel:

Wolfgang Mix 23. Sep 2009 11:14

Re: Datum auf Fehler prüfen - Deutsches Datumsformat
 
Meine OH gibt folgende Auskunft:

Zitat:

Mit TryStrToDate kann ein String mit einer Datumsangabe zerlegt werden. Enthält S kein gültiges Datum, gibt TryStrToDate false zurück.
d,m und y sind vom Typ Integer.

Gruß

Wolfgang

DeddyH 23. Sep 2009 12:21

Re: Datum auf Fehler prüfen - Deutsches Datumsformat
 
Aber mydate ist vom Typ TDateTime :zwinker:

Wolfgang Mix 23. Sep 2009 13:55

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 22:28 Uhr.
Seite 2 von 2     12   

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