日付の繰上げ禁止

以下のプログラムでは「2009/3/33」というありえない入力値をパースしようとしているので、エラーが出ることを期待する。しかし実際は繰り上がって「2009/4/2」という日付オブジェクトが生成されてしまう。

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
Date date = simpleDateFormat.parse("2009/3/33");
System.out.println(date);

こういう時どうするかというと、パースする前に以下のように設定しておくことでパース処理が厳密になり、エラーが発生するようになる。

simpleDateFormat.setLenient(false);

仕事中に後輩に質問されたものの、久々だったのでなかなか思い出せなかった。「Lenient」は馴染みがない単語やから覚えにくいっす。