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?