Leider fmt.setLenient (false); erreicht keine strikte Datumsformatierung. Es hilft einigen, zum Beispiel Parsing "2010-09-01" mit dem Format "yyyyMMdd" wird gelingen, wenn nachsichtig == wahr, aber das Ergebnis ist sehr seltsam: 2009/12/09.
Auch wenn nachsichtig == false parse() noch nachsichtig agiert. "2010/01/5" ist für das Muster "JJJJ/MM/TT" erlaubt. Und Daten Meinungsverschiedenheiten wie "1999/2011" für das Muster "JJJJ/JJJJ" wird toleriert (nach 2011). Müll ist auch erlaubt, nachdem das Muster übereinstimmt. Zum Beispiel: "20100901" und "20100901andGarbage" stimmen beide mit "yyyyMMdd" überein.
Ich habe eine Erweiterung von SimpleDateFormat geschrieben, die strenge Mustererkennung erzwingt. Sie können es hier finden:
SimpleDateFormat.parse() ignores the number of characters in pattern
In meiner Version Format() und analysieren() sind funktional Umkehrungen. Das ist, was ich denke, dass die meisten Leute erwarten würden.
es kann oder kann nicht lösen Ihr Problem, aber, wenn Sie mit Daten in Java beschäftigen, würde ich die Joda Time-Bibliothek dringend empfehlen – Eduardo