DateTime String-Analyse

8

Ich habe einen generischen Parser zum Parsen von ASCII-Dateien erstellt. Wenn ich Daten analysieren will, verwende ich die ParseExact-Funktion im DateTime-Objekt, um zu analysieren, aber ich bekomme Probleme mit dem Jahr.

Der zu analysierende Text ist z. B. "090812" mit der parseExact-Zeichenfolge "yyMMdd".

Ich hoffe, ein DateTime-Objekt zu bekommen, das "12/8-2009" sagt, aber ich bekomme "12 / 8-1909". Ich weiß, dass ich eine hässliche Lösung machen könnte, indem ich es danach analysiere und dadurch das Jahr modifiziere.

Weiß jemand von einem klugen Weg, um das zu lösen?

Vielen Dank im Voraus ..

Søren

    
MüllerDK 14.08.2009, 11:14
quelle

3 Antworten

17

Theoretisch elegante Vorgehensweise: Ändern Sie die Eigenschaft TwoDigitYearMax des Calendar , das von% DateTimeFormatInfo verwendet wird, um den Text zu analysieren. Zum Beispiel:

%Vor%

Verwenden Sie dann dtfi in Ihrem Aufruf von DateTime.ParseExact .

Praktische Vorgehensweise: Fügen Sie "20" zum Anfang Ihrer Eingabe hinzu und parsen Sie mit "yyyyMMdd".

    
Jon Skeet 14.08.2009, 11:22
quelle
2

Nun, wenn Sie sicher sind, dass all Ihre Quelldaten dieses Jahrhundert sind, dann könnten Sie parseExact für eine "20" -vordefinierte Quellzeichenfolge verwenden.

    
MartW 14.08.2009 11:20
quelle
2

Sie müssen eine Art von Schwelldatum für Ihre Daten festlegen. Wenn das analysierte Datum vor diesem Datum liegt, addieren Sie 100 Jahre hinzu. Ein sicherer Weg, dies zu tun, besteht darin, der Eingabezeichenfolge das entsprechende Jahrhundert voran zu stellen. In diesem Beispiel habe ich 1970 als Cutoff gewählt:

%Vor%

Jon Skeet hat auch ein schönes Beispiel mit DateTimeFormatInfo gepostet, das ich kurz vergessen hatte:)

    
Thorarin 14.08.2009 11:19
quelle

Tags und Links