Rails:如何让created_at显示当前时区的时间?

Sch*_*ems 6 time datetime ruby-on-rails

似乎当我创建一个对象时,时间不正确.您可以通过下面的脚本/控制台输出看到.有没有人遇到这样的事情,或有任何调试技巧?

 >> Ticket.create(...)
=> #<Ticket id: 7, from_email: "foo@example.com", ticket_collaterals: nil, to_email: "foo2@example.com", body: "hello", subject: "testing", status: nil, whymail_id: nil, created_at: "2009-12-31 04:23:20", updated_at: "2009-12-31 04:23:20", forms_id: nil, body_hash: nil>
>> Ticket.last.created_at.to_s(:long)
=> "December 31, 2009 04:23"
>> Time.now.to_s(:long)
=> "December 30, 2009 22:24"
Run Code Online (Sandbox Code Playgroud)

Cha*_*tni 15

这是时区问题.Time.now在当地时区打印时间,而rails则以UTC格式报告.看config/environment.rb,它会有config.time_zone = "UTC"

>> Ticket.create(...)
>> Ticket.last.created_at.utc
=> Thu, 31 Dec 2009 04:41:58 UTC +00:00
>> Time.now.utc
=> Thu Dec 31 04:42:18 UTC 2009
>> Time.now
=> Wed Dec 30 20:44:50 -0800 2009
Run Code Online (Sandbox Code Playgroud)

您可以设置TimeZone environment.rb以避免混淆.

# config/environment.rb
config.time_zone = "Central Time (US & Canada)"
Run Code Online (Sandbox Code Playgroud)

  • 运行"rake time:zones:all"以获取实际列表.你需要像"中央时间(美国和加拿大)"这样的东西而不仅仅是"CST". (6认同)
  • 只想在rails 3.0中添加它,config.time_zone位于application.rb而不是environment.rb中 (3认同)