railsでto_yamlでactiverecordのオブジェクトをyaml化すると、日付関連がこのようになった。
mydate: !timestamp 08/10/10
で、これをrubyのYAML::loadで、読ませると’argument out of range’というエラーになる。
日付で問題なのはなぜか10月(他にもあるかもしれない。)
irb> require 'yaml'
irb> YAML::load("mydate: !timestamp 08/10/10")
ArgumentError: argument out of range
irb> YAML::load("mydate: !timestamp 08/11/10")
=> {"mydate"=>Thu Jan 10 00:00:00 UTC 2008}
(あれ?、よくみると11月も1月になってるし。。。)
irbでDateをyaml化すると、以下のようなフォーマットになる。
irb> Date.new(2008,10,10).to_yaml
=> "--- 2008-10-10\n"
なので、きっとrailsがto_yamlで変なことをしてるんだろう。
いろいろ調べて、environment.rbの記述を変更することで対処できた。
ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.update :default => "%Y/%m/%d"
なぜか、’%y’で設定してたので、’%Y’に変えた。
俺のミスってことだな。
ツイート