Time.zone.parse
に渡す引数は日付っぽいものであり、かつvalidであればきちんとparseされ、
日付として認識されるフォーマットでありつつも値がおかしい(2020-99-99 99:99:99
など)場合はArgumentError
がraiseされ、
そもそも日付として認識されない文字列はnil
を返す。
nil
を返すんですね。(2回目)
最後の場合もArgumentError
がraiseされる想定だったためハマった。
要件としては「ユーザーが自由入力できる入力欄において、日付としてvalidな文字列であればそのまま保存し、invalidな文字列であればエラーを吐かせる」ものだったのであまりないパターンかとは思う。
参考
リファレンス
https://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#method-i-parse
20:00:00
とかもいけるっぽい(日付は現在日付になる)
Qiita
https://qiita.com/slightair/items/fa5f63016c0c848111a9
ここでもnilになる挙動について少し触れられている