| Autor |
Beitrag |
jf_stgt
      
Beiträge: 88
|
Verfasst: Di 21.04.09 12:04
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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Di 21.04.09 12:13
Oder noch besser: Du bietest ihm 3. Dropdown-Listen an und er kann es damit auswählen.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
matze
      
Beiträge: 4613
Erhaltene Danke: 24
XP home, prof
Delphi 2009 Prof,
|
Verfasst: 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.
_________________ In the beginning was the word.
And the word was content-type: text/plain.
|
|
jf_stgt 
      
Beiträge: 88
|
Verfasst: 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
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: 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
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Di 21.04.09 16:08
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
jf_stgt 
      
Beiträge: 88
|
Verfasst: 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
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Di 21.04.09 16:28
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
jf_stgt 
      
Beiträge: 88
|
Verfasst: Di 21.04.09 16:42
|
|
ssb-blume
      
Beiträge: 375
Erhaltene Danke: 7
XP, W7, W8
Deutschland
|
Verfasst: 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); .... |
_________________ Brain: an apparatus with which we think we think.
|
|
jf_stgt 
      
Beiträge: 88
|
Verfasst: 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
      
Beiträge: 128
Erhaltene Danke: 32
Win 7
Delphi 7 Pers., C# (VS 2010 Express)
|
Verfasst: 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.
|
|