日時(DateTime)のデフォルト

Railsの DateTime型を使っていて「なんで日付の標記が YYYY-MM-DD やねん!」とイラっときたこと、ありませんか? 私はよくあります。

なにもしない場合

PS C:\home\www\3n10> ruby script/console
 >> DateTime.now
 => Fri, 24 Oct 2008 05:56:28 +0900
 >> DateTime.now.to_s
 => "2008-10-24T05:56:34+09:00"
 >> DateTime.now.to_s(:db)
 => "2008-10-24 05:56:49"

こんな風に YYYY-MM-DDで返ってきます。使うときにいちいち、DateTime.now.to_s(:db).gsub("-", "/") なんてこと、やります? やってもいいですけど、もう少しマシな方法があります。

デフォルトを変える

config/environment.rb の最後に次の1文を加えます。

ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS[:default]
                                                   = "%Y/%m/%d %H:%M:%S"

最後の endの上(Rails::Initializer.runブロックの中)に加えてはダメです。endの下です。そうしないと、こんなエラーが出ます。

Loading development environment (Rails 2.1.0)
C:/home/www/3n10/config/environment.rb:77:NameError: uninitialized constant ActiveSupport
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:93:NoMethodError: undefined method `cattr_accessor' for ActionController::Di
spatcher:Class
C:/home/www/3n10/app/controllers/application.rb:4:NameError: uninitialized constant ActionController::Base

設定を正しく書き加えたら確認してみましょう。

PS C:\home\www\3n10> ruby script/console
 >> DateTime.now
 => Fri, 24 Oct 2008 05:56:28 +0900
 >> DateTime.now.to_s
 => "2008/10/24 05:51:22"
 >> DateTime.now.to_s(:db)
 => "2008-10-24 05:56:49"

to_sは設定通りになっていますね。to_s(:db)は元のままです。to_s(:db)にしているところは、to_sに置き換えましょう。