Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Eingabe wie z.B. 1.7.50 in (DateTime Obj) 01.07.1950 wandeln
jf_stgt - Di 21.04.09 12:04
Titel: Eingabe wie z.B. 1.7.50 in (DateTime Obj) 01.07.1950 wandeln
Hallo zusammen,
die Funktion StrToDate wandelt ja Benutzereingaben in ein DateTime Objekt um.
In unserer Software wird eine Benutzereingabe eines Geburtsdatums umgewandelt durch
Delphi-Quelltext
1: 2: 3: 4:
| ... dtObj := StrToDate(Edit1.Text); Edit1.Text := DateToStr(dtObj); ... |
Tut soweit auch wenn jemand z.B. 1.7.70 eingibt.
Dies wird dann umgewandelt in 01.07.1970.
Gibt der Kunde allerdingg 1.7.50 ein, wird das Datum in 01.07.2050 gewandelt.
Das Problem ist, dass dies für ein Geburtsdatum natürlich kein Sinn macht und eigentlich als Jahr 1950 rauskommen hätte müssen. Gerade bei Geburtsdaten.
Hat jemand eine Idee, was man da tun könnte?
Man könnte dies natürlich manuell überwachen aber vielleicht gibts ja irgendwas, was die StrToDate steuert.
Gruß
Jürgen
elundril - Di 21.04.09 12:12
ich hab zwar keine direkte lösung aber wie wäre es wenn du ein Mask-Edit verwenden würdest und damit den User "zwingst" die Eingabe vollständig auszufüllen??
lg elundril
GTA-Place - Di 21.04.09 12:13
Oder noch besser: Du bietest ihm 3. Dropdown-Listen an und er kann es damit auswählen.
matze - Di 21.04.09 13:35
GTA-Place hat folgendes geschrieben : |
| Oder noch besser: Du bietest ihm 3. Dropdown-Listen an und er kann es damit auswählen. |
Das ist die Frage ob das besser ist. Mich nervt sowas eher.
jf_stgt - Di 21.04.09 14:31
GTA-Place hat folgendes geschrieben : |
| Oder noch besser: Du bietest ihm 3. Dropdown-Listen an und er kann es damit auswählen. |
Das ist für einen User nicht gerade Benutzefreundlich - sorry!
Auch die vorgeschlagene Lösung mit Mask Edit würde zwar gehen, aber auch das finde ich nicht soo der Brüller.
Der Kunde muss ruck zuck die Daten eingeben und er mostert jetzt schon, dass er das 19xx mit eingeben muss.
Narses - Di 21.04.09 15:07
Moin!
Das das Problem nun mal nicht eindeutig lösbar ist, wirst du dich für eine ähnlich geartete Lösung entscheiden müssen. Kompromisse wären:
- Den Splitpoint dynamisch auf 5 Jahr in die Zukunft legen -> 2009..2013,1914...
- Wenn das Datum um einen bestimmten Betrag vom aktuellen Jahr abweicht, Fragen, geschickt den Default-Button dazu auswählen
- 4-stellige Eingabe erzwingen
cu
Narses
Boldar - Di 21.04.09 15:10
naja, ein geburtsdatum kann ja nicht in der Zukunft liegen, also wenn es in der Zukunft liegt, einfach 100 abziehen.
GTA-Place - Di 21.04.09 16:08
jf_stgt hat folgendes geschrieben : |
| Der Kunde muss ruck zuck die Daten eingeben und er mostert jetzt schon, dass er das 19xx mit eingeben muss. |
Dir ist aber schon bewusst, dass man das Auswählen der Combobox genau wie das Eintippen in ein Feld mit der Tastaur erledigen kann? Einmal 12 tippen wählt im ersten Feld auch 12 aus ;-)
jf_stgt - Di 21.04.09 16:24
Hallo!
Danke für eure rege Diskussion und Vorschläge.
GTA-Place hat folgendes geschrieben : |
jf_stgt hat folgendes geschrieben : | | Der Kunde muss ruck zuck die Daten eingeben und er mostert jetzt schon, dass er das 19xx mit eingeben muss. |
Dir ist aber schon bewusst, dass man das Auswählen der Combobox genau wie das Eintippen in ein Feld mit der Tastaur erledigen kann? Einmal 12 tippen wählt im ersten Feld auch 12 aus ;-) |
Wenn ich das Datum direkt eintippe, komme ich mit wenigen Klicks aus. Wenn man z.B. das Jahr über ein Dropdown Feld auswählt, dauert es ewig über Maus oder Tastatur.
Boldar hat folgendes geschrieben : |
| naja, ein geburtsdatum kann ja nicht in der Zukunft liegen, also wenn es in der Zukunft liegt, einfach 100 abziehen. |
Dies gefällt mir für mich am besten. Danke.
Gruß
Jürgen
GTA-Place - Di 21.04.09 16:28
jf_stgt hat folgendes geschrieben : |
| Wenn ich das Datum direkt eintippe, komme ich mit wenigen Klicks aus. Wenn man z.B. das Jahr über ein Dropdown Feld auswählt, dauert es ewig über Maus oder Tastatur. |
Versteh ich jetzt nicht. Vorgehen für ein fiktives Geburtsdatum (Angaben in Klammern entsprechen den Tasten der Tastatur):
Quelltext
1: 2:
| Dropdown: [1] [Tab] [1] [Tab] [1] [9] [5] [0] Textfeld: [1] [.] [1] [.] [1] [9] [5] [0] |
Ich sehe da jetzt keinen Unterschied?!
elundril - Di 21.04.09 16:29
jf_stgt hat folgendes geschrieben : |
Wenn ich das Datum direkt eintippe, komme ich mit wenigen Klicks aus. Wenn man z.B. das Jahr über ein Dropdown Feld auswählt, dauert es ewig über Maus oder Tastatur.
Gruß
Jürgen |
darf ich meinen Informatik-Lehrer zitieren? "Mäuse sind was für Katzen"
und mittels richtiger Taborder usw sind mir somanche dieser programme lieber als diese "Black boxes" um es mal übertrieben zu formulieren.
lg elundril
jf_stgt - Di 21.04.09 16:42
Die Eingabe ist aber [1].[1].[5][0]
Darum gehts.
elundril hat folgendes geschrieben: |
darf ich meinen Informatik-Lehrer zitieren? "Mäuse sind was für Katzen"
lg elundril |
Klasse Spruch!
Moderiert von
Narses: Zitat repariert
ssb-blume - Mi 22.04.09 10:09
Hallo,
versuch mal Folgendes:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| uses DateUtils; ... var d: TDate; ... d := StrToDate(Edit1.Text); if YearOf(now) < YearOf(d) then d := IncYear(d, -100); Edit1.Text := DateToStr(d); .... |
jf_stgt - Mi 22.04.09 11:41
ssb-blume hat folgendes geschrieben : |
Hallo,
versuch mal Folgendes:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| uses DateUtils; ... var d: TDate; ... d := StrToDate(Edit1.Text); if YearOf(now) < YearOf(d) then d := IncYear(d, -100); Edit1.Text := DateToStr(d); .... | |
Guter Code!
Danke!
Damit schließe ich mal diese Frage hier.
Gruß
Jürgen
Stundenplan - Mi 22.04.09 16:42
Es geht auch mit TwoDigitYearCenturyWindow := 50;
Windows nimmt als Bezugsjahr nämlich das aktuelle, also 2009. Und TwoDigitYearCenturyWindow setzt das Bezugsjahr um 50 Jahre zurück.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!