Wie kann SimpleDateFormat daran gehindert werden, falsch formatierte Daten zu analysieren?

Ich benutzeSimpleDateFormat Strings nach @ parsDate Objekte und ich frage mich, warum die Ergebnisse nicht das sind, was ich erwarte.

Beispielsweise

DateFormat yyyyMMdd = new SimpleDateFormat("yyyyMMdd");

Date date = yyyyMMdd.parse("20100725");
System.out.println(date);

works as expected und Ausgänge

Sun Jul 25 00:00:00 CEST 2010

Abe

Date date = yyyyMMdd.parse("2010-07-25");
System.out.println(date);

funktioniert auch und gibt @ a

Mon Dec 07 00:00:00 CET 2009

Ich habe ein @ erwartParseException, aber es scheint, dassSimpleDateFormat interpretiert den Monatsteil-07 und der Tag Teil-25 als negative Zahl. Zuerst konnte ich nicht herausfinden, wie es zum 7. Dezember kommt. Also habe ich einen anderen Wert ausprobiert:

Date date = yyyyMMdd.parse("2010-7-25");
System.out.println(date);

und es outpus

Sun Apr 05 00:00:00 CEST 2009

So scheint es, dass es irgendwie subtrahiert7 Monat aus dem Jahr2010 was wäre der 1. Mai und25 Tage, also das Ergebnis ist der 5. April 2009.

Bild, dass Sie das Muster @ verwendyyyyMMdd in einer Service-Implementierung und ein Client sendet das Datum versehentlich alsyyyy-MM-dd. Sie erhalten keine Ausnahme. Stattdessen erhalten Sie ganz andere Termine. Ich denke, das ist nicht das, was du erwartest.

Z.B

String clientData = "2010-05-23";

DateFormat yyyyMMdd = new SimpleDateFormat("yyyyMMdd");
Date parsedDate = yyyyMMdd.parse(clientData);

System.out.println("Client  : " + clientData);
System.out.println("Service : " + yyyyMMdd.format(parsedDate));

Ich vermisse etwas?

Wie verhindere ichSimpleDateFormat 'falsche' Daten analysieren?

Sicher, ich kann zuerst einen regulären Ausdruck verwenden, aber gibt es einen besseren Weg?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage