ttp://www.ruby-lang.org/ja/man/?cmd=view;name=Date
>valid_date? (year, mon, mday[, start])
>正しい暦日付であれば、相当するユリウス日を返します。そうでないなら、偽を返します。

実際は存在しない日付は偽(false)じゃなくnilが帰ってくる。仕様が変わった?
それとも環境によって変わるのかな。