2009-12-31 5 views
6

Scheint, wenn ich ein Objekt erstellen, ist die Zeit nicht korrekt. Sie können die Skript-/Konsolenausgabe unten sehen. Hat jemand auf so etwas gestoßen oder irgendwelche Debugging-Tipps?Rails: Wie erhalte ich created_at, um die Zeit in meiner aktuellen Zeitzone anzuzeigen?

>> 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" 

Antwort

15

Es ist das Zeitzonenproblem. Time.now gibt Zeit in Ihrer lokalen Zeitzone aus, während die Rails dies in UTC melden. Siehe config/environment.rb, wird es 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 

haben Sie die Zeitzone in environment.rb einstellen um Verwechslungen zu vermeiden.

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

Führen Sie "Rake-Zeit: Zonen: alle", um die tatsächliche Auflistung zu erhalten. Sie brauchen etwas wie "Central Time (USA & Kanada)" und nicht nur "CST". – wesgarrison

+0

Danke wesgarison. Ich habe das Beispiel aktualisiert. –

+3

wollte nur hinzufügen, dass von Rails 3.0, config.time_zone lebt in application.rb statt environment.rb –

Verwandte Themen