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
という手もあるにはあるが、
正規表現は、気分的にコストがかかる気がして嫌だ。
本当にないんかな。