2009-12-31 52 views
6

似乎當我創建一個對象時,時間不正確。您可以通過下面的腳本/控制檯輸出查看。有沒有人遇到過這樣的事情,或者有任何調試技巧?Rails:如何獲取created_at以顯示當前時區中的時間?

>> Ticket.create(...) 
=> #<Ticket id: 7, from_email: "[email protected]", ticket_collaterals: nil, to_email: "[email protected]", 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" 

回答

15

這是時區問題。 Time.now在您的本地時區打印時間,而導航欄則以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 

您可以設置時區在environment.rb以避免混淆。

# config/environment.rb 
config.time_zone = "Central Time (US & Canada)" 
+6

運行「rake time:zones:all」以獲得實際列表。你需要像「中央時間(美國和加拿大)」,而不僅僅是「CST」。 – wesgarrison 2009-12-31 05:25:07

+0

謝謝wesgarrison。我已經更新了這個例子。 – 2009-12-31 06:01:51

+3

只是想補充說,從rails 3.0中,config.time_zone住在application.rb而不是environment.rb – 2013-10-14 13:28:55