ActiveSupportでDateTimeの出力形式か変わる

また、ActiveSupportの絡みで嵌ったのでメモ。

ActiveSupport は DateTime の to_s() のメソッドのデフォルト(引数無し)出力形式を変更してしまうらしい。

前回のLoggerの場合は、フォーマットを設定して対応したので今回もそれの類で、解決出来るだろうと調べたらやはりあった。以下のようなコードを追加すれば良い。

Time::DATE_FORMATS[:default] = "%Y/%m/%d %H:%d:%S"

ちなみに、:default は to_s() のデフォルト引数になっている。これ以外に :db 等、数種類ある。

関連して、ActiveSupport が DBI::Timestamp を DateTime に変換して持ってくることがあるので、どっちも同じコードで、同じ出力形式にしたい。

そこで、DBI::Timestamp を to_time で変換して to_sする。DateTime は to_time しても型は変わらないので to_s でどちらも同じ出力になる。