Entwickler-Ecke

WinForms - Geburtsdatum aus String auslesen


mo0n_ - Di 14.02.12 12:01
Titel: Geburtsdatum aus String auslesen
Guten Morgen liebes Forum,

ein neuer Tag eine neue Aufgabe:
heute habe ich folgenden string vorliegen:


C#-Quelltext
1:
string test = "VNr:00572314;Geb:30.04.27;Auf:15.01.12-30.01.12;VorstAuf:-;HV:Kock Waltraud;HVGeb:30.04.27";                    


aus diesem string möchte ich jetzt das Geburtsdatum herauslesen.

Hilfe wäre super :)

Moderiert von user profile iconTh69: Titel angepaßt.


Th69 - Di 14.02.12 12:59

Hallo mo0n_,

und woran scheiterst du genau?

Hier schon mal ein paar Stichworte zum Einlesen: String.Split, String.Substring, DateTime.Parse, DateTime.ParseExact


mo0n_ - Di 14.02.12 13:56

hey TH69,
im Prinzip an garnichts,
ich habe das Geburtsdatum erfolgreich von Rest des strings abgetrennt:

C#-Quelltext
1:
2:
3:
4:
            string test = "VNr:00572314;Auf:15.01.12-30.01.12;VorstAuf:-;Geb:30.04.27;HV:Kock Waltraud;HVGeb:30.04.27";
            test = test.Substring(test.IndexOf("Geb:") + 4);
            test = test.Remove(test.IndexOf(";"));
            DateTime geb = Convert.ToDateTime(test);

Nun passiert aber folgendes:
Da die Person im Beispiel 27 geboren ist (1927), möchte ich, dass das Geburtsjahr komplett ausgegeben wird:

C#-Quelltext
1:
            MessageBox.Show(string.Format("{0:dd-MM-yyyy}", geb).ToString());                    

Leider ist mein Computer dagegen, und gibt mir das Jahr 2027 aus.
Meine Frage ist nun: Wie kann ich dem Programm sagen, dass es nur Daten verwenden darf, die schon vergangen sind.


mats74 - Di 14.02.12 14:38

Hallo mo()n

Das mit der Vergangenheit wird wohl auch nicht funktionieren.
Aus 01.01.10 könnte ja 1910 oder 2010 ausgegeben werden.
Da es junge und etwas ältere Menschen gibt ist das mit deinem String nicht klar definiert.
(1810 wäre Weltrekordverdächtig :wink: )

Hast Du sonst noch einen Parameter (für die Jahrhundertangabe) zur Verfügung?


mo0n_ - Di 14.02.12 14:41

Leider nein :(. Naja ich probier noch ein bisschen rum, aber wenns nicht geht, dann gehts eben nicht :-/


Th69 - Di 14.02.12 15:00

Ach so, du hast also ein Y2K-Problem ;-)

s. http://stackoverflow.com/questions/1050225/preferred-method-for-handling-y2k-date-conversions

Ansonsten kannst du ja auch einfach nachträglich das Datumsjahr ändern:

C#-Quelltext
1:
2:
if (geb.Year >= 2000)
  geb = geb.AddYears(-100);

Aber du mußt dir natürlich der Y2K-Problematik klar sein (sonst hast du evtl. 100-jährige Kinder oder junge Greise).


Ralf Jansen - Di 14.02.12 15:06

Wenn du zum Konvertieren (string -> Datetime) eine der DateTime.Parse Methoden mit IFormatProvider verwendest kannst du dort eine CultureInfo übergeben mit passend gesetztem Kalender [http://msdn.microsoft.com/de-de/library/system.globalization.calendar.twodigityearmax.aspx]. Dann hast du zumindest die letzten 100 Jahre korrekt und müßtest dich nur mit der Generation > 100 Jahre streiten das dein Programm für die nicht richtig funktioniert ;)


C#-Quelltext
1:
2:
3:
4:
CultureInfo info = (CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
info.Calendar.TwoDigitYearMax = DateTime.Now.Year;

DateTime geb  = DateTime.Parse(test,info);


mo0n_ - Mi 15.02.12 11:44

Habs jetzt mehr oder minder hinbekommen :)
Wie immer vielen Dank für die superschnelle Hilfe