2010-09-25 9 views
9

In config/application.rb habe ich "config.time_zone = 'UTC'" (ohne Anführungszeichen) in der Datei. Ich gehe davon aus, dass die Konvertierung von der Benutzerzeit, die in die Ansicht eingegeben wird, in UTC erfolgt, die in der Datenbank gespeichert ist. Meine Frage ist, wie konvertiere ich den UTC-Wert von der Datenbank zur lokalen Zeit des Benutzers, um in der Ansicht angezeigt zu werden? Ich habe gelesen, dass rails das automatisch erledigt - wie sage ich es dazu?Lokale Zeit in Ansicht anzeigen

Ich habe ein Zeitzone-Feld in jeder Benutzerzeile in der Datenbank, ich bin nur nicht sicher, was ich dort speichern soll. Ich weiß über Rake Time Bescheid: Zonen: alle - ich weiß einfach nicht, wie das alles in Rail 3 zusammenpasst!

Danke,

sk

Antwort

15

Wenn in Multi-Zonen-Umgebung arbeiten ist es ratsam, die Zeitzone auf UTC eingestellt haben. Das ist völlig in Ordnung in Ihrem application.rb

Rails automatisch alle Zeit, um die aktuelle Zeitzone verwandelt, die mit

Time.zone = "some-zone" 

eingestellt werden können, was ich benutze ein before_filter in Application ist, wo ich Stellen Sie die Zeitzone entsprechend dem aktuellen Benutzer ein. Dann funktionieren alle Operationen innerhalb dieser Zone und Sie müssen nicht in Ihren Controllern/Modellen/Ansichten darüber nachdenken.

Angenommen, Sie haben ein Modell Foo mit einem Datetime-Feld. Dann in der irb Konsole arbeiten:

Time.zone = "Prague" 
x = Foo.create(:it_will_happen_at => Time.zone.now) 
x.it_will_happen_at # => Sat, 25 Sep 2010 13:45:46 CEST +02:00 

Time.zone = "London" 
# it is needed to refresh the field after a time zone has changed. 
# In normal situation it'd not be needed, it's just for this console example 
x.reload 
x.it_will_happen_at # => Sat, 25 Sep 2010 12:44:46 BST +01:00 

Wenn Sie einen Blick in die DB nehmen, werden Sie diesen Wert finden, ist Sa, 25. September 2010 11.45.46 UTC.

Wie für die Zone Wert bevorzuge ich Namen der Städte, wie es reibungslos mit Sommerzeit (Sommer/Winterzeit) funktioniert.

+0

Danke - Ihr Vorschlag funktioniert perfekt! – dingalingchickenwiing

+0

hat meine Zeit gerettet !! sollte das früher gefunden haben. –

Verwandte Themen