JavaのDateFormat

JavaのDateFormatで文字列の日付をパースすると気の話だが、

yyyy/MM

という日付書式に、
2010/06/15
っていう文字列日付を入れてもパースできちゃうっていうのはどうゆう仕様なんだろうか。


ついでにいうと、

DateFormat#setLenient( false );

しても別に変わらないという罠。
2010/00とかは判別できるけども…。


それとも日付のチェックは別にすべきなのかな。
「パース可能だったら日付として正しい」というロジックが間違いなのかな。


とりあえず、

String(★1) →parse(yyyy/MM) →Date →format(yyyy/MM) →String(★2)

で、

★1と★2が同じだったら最終的にOK。
それ以外のparse時にParseExceptionやnullを返したりした場合には日付としては不正

というロジックをよく取るかな。


今使用しているライブラリから、DateFormatから階層表示しても、
SimpleDateFormat以外にはそれらしいものはでてこないしなぁ。


正規表現で、[0-9]{4}/{0-9]{2}というのをくぐらせてから、
setLenient(false);
して、
parseでnullやExceptionにならなければ、OK
という手もあるにはあるが、
正規表現は、気分的にコストがかかる気がして嫌だ。


本当にないんかな。