Entwickler-Ecke

Sonstiges (Delphi) - 6-stellige Zahl in Datum (mit Punkten) konvertieren...


kiwicht - Di 28.01.03 18:13
Titel: 6-stellige Zahl in Datum (mit Punkten) konvertieren...
Hallo zusammen..

ich will meinen Anwendern die Datums-Eingabe etwas vereinfachen und deshalb ermöglichen, anstatt das Datum in folgender Form
30.05.1979
in dieser Form, ohne Punkte einzugeben:
30051979

Ich hätte jetzt, Anfänger wie ich bin :D, einfach 3 EditFelder genommen, und dann jenes:
Datum := Edit1.Text + '.' + Edit2.Text + '.' + Edit3.Text

Ich habs auch schon so, zugegeben etwas eleganter, probiert, das hat aber nicht geholfen (Fehlermeldung: Kein Datum):

FormatDateTime('dd"."mm"."yyyy', StrToDate(Edit.Text);

Gibts de facto eine Alternative zu meinen stümperhaften :shock: Versuchen?

mit bestem Dank

kiwicht


smiegel - Di 28.01.03 18:22

Hallo Kiwicht,

die einfachste Möglichkeit ist:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var s:String;
...
  s:=Edit1.Text;
  if (Length(s)<>8) then // 30051979 entspricht 8 Stellen
  begin
    ShowMessage('Eingabe ist falsch');
    Edit1.SetFocus;
    Exit;
  end; // if
  EditDatum.Text:=Format("%s.%s.%s", [System.Copy(s, 1, 2), System.Copy(s, 3, 2), System.Copy(s, 5, 4)]);


Schwieriger wird es, wenn er bei Tagen und Monaten keine führende Null angibt. Also statt 06051955 --> 651955. Aber damit nicht genug. Wenn schon komfortabel, was ist dann, wenn der Benutzer das Jahr nur 2-stellig angibt --> 6555. Dann habe ich noch zusätzlich das Problem, dass ich nicht einmal weiss, in welchem Jahrhundert ich bin;-)


Wolff68 - Di 28.01.03 19:04

Oder Du setzt Dir einfach die Punkte, wohin sie gehören:

Quelltext
1:
2:
3:
4:
  s := Edit1.Text; // TTMMYY oder TTMMYYYY
  Insert('.', s, 3);
  Insert('.', s, 6);
  d := StrToDate(s);

Damit ist auch egal, ob er das Jahr 2- oder 4-Stellig angibt. 8)
die Führenden Nullen bei Tag oder Monat sind aber ein MUSS.
Das ganze sollte übrigends unbedingt in einen Try-Except Block.


grayfox - Di 28.01.03 19:57

hallo kiwicht!

ich würde ein TMaskEdit verwenden, bei dem ich das property 'EditMask ' auf '!90/90/0000;1;_' setze.
somit ersparst du dir schon die überprüferei auf gültige datumseingaben :)
mfg, stefan


kiwicht - Mi 29.01.03 17:50

ach gott.. soviel antworten.. kann mich garnich entscheiden.. :shock: :D ..

ich probier alle mal aus, weil gut sehen sie alle aus, vielen dank dafür!

mfg
kiwicht