Java ist auch eine Insel

Montag, März 26, 2007

parse()-Fehler bei DateFormat und setLenient(false)

Unsinnige Werte meckert parse() standardmäßig nicht an, wie die folgenden Zeilen darlegen:

DateFormat formatter = new SimpleDateFormat( "dd-MM-yyyy" );
System.out.println( formatter.parse( "29-02-2008" ) ); // Fri Feb 29 00:00:00 CET 2008
System.out.println( formatter.parse( "29-02-2007" ) ); // Thu Mar 01 00:00:00 CET 2007
System.out.println( formatter.parse( "33-02-2008" ) ); // Tue Mar 04 00:00:00 CET 2008

An den letzten beiden Beispielen lässt sich ablesen, dass das Datum auf den nächsten Monat „rollt“. Um das abzusichern, bietet DateFormat eine Funktion setLenient(boolean), die den „Mildmodus“ mit setLenient(false) ausschaltet.

DateFormat formatter = new SimpleDateFormat( "dd-MM-yyyy" );
formatter.setLenient( false );
System.out.println( formatter.parse( "29-02-2007" ) );

Jetzt gibt es für den 29.02.2007 eine ParseException mit dem Text „Unparseable date: "29-02-2007"“. Der 29.02.2008 ist in Ordnung, weil 2008 ein Schaltjahr ist.

Labels:

AddThis Social Bookmark Button