Autor Beitrag
mo0n_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50

Win7
C#
BeitragVerfasst: Di 14.02.12 12:01 
Guten Morgen liebes Forum,

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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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_ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50

Win7
C#
BeitragVerfasst: Di 14.02.12 13:56 
hey TH69,
im Prinzip an garnichts,
ich habe das Geburtsdatum erfolgreich von Rest des strings abgetrennt:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: 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?

_________________
Gruss
mats74
mo0n_ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50

Win7
C#
BeitragVerfasst: Di 14.02.12 14:41 
Leider nein :(. Naja ich probier noch ein bisschen rum, aber wenns nicht geht, dann gehts eben nicht :-/
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 14.02.12 15:00 
Ach so, du hast also ein Y2K-Problem ;-)

s. stackoverflow.com/qu...y2k-date-conversions

Ansonsten kannst du ja auch einfach nachträglich das Datumsjahr ändern:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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. 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 ;)

ausblenden 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_ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50

Win7
C#
BeitragVerfasst: Mi 15.02.12 11:44 
Habs jetzt mehr oder minder hinbekommen :)
Wie immer vielen Dank für die superschnelle Hilfe