Meine created_at
Zeitstempel werden in UTC gespeichert:
>> Annotation.last.created_at
=> Sat, 29 Aug 2009 23:30:09 UTC +00:00
Wie konvertiere ich eine davon in "Eastern Time (USA & Kanada)" (unter Berücksichtigung der Sommerzeit)? Etwas wie:
Annotation.last.created_at.in_eastern_time
ruby-on-rails
ruby
datetime
Tom Lehman
quelle
quelle
now.in_time_zone(3)
created_at.in_time_zone("EST")
ist kürzerObwohl dies eine alte Frage ist, ist es wert, etwas zu erwähnen. In einer früheren Antwort wurde empfohlen, einen before_filter zu verwenden, um die Zeitzone zeitlich festzulegen.
Sie sollten dies niemals tun, da Time.zone die Informationen im Thread speichert und sie wahrscheinlich an die nächste von diesem Thread behandelte Anforderung weiterleiten.
Verwenden Sie stattdessen einen around_filter, um sicherzustellen, dass die Time.zone nach Abschluss der Anforderung zurückgesetzt wird. Etwas wie:
Lesen Sie mehr dazu hier
quelle
Wenn Sie dies zu Ihrem hinzufügen
/config/application.rb
Dann können Sie Zelle
um die Zeit in der angegebenen Zeitzone zu erhalten.
quelle
Wenn Sie Ihre konfigurieren
/config/application.rb
quelle
Stellen Sie Ihre Zeitzone auf Eastern Time ein.
Sie können Ihre Standardzeitzone in config / environment.rb festlegen
Jetzt befinden sich alle Datensätze, die Sie herausziehen, in dieser Zeitzone. Wenn Sie unterschiedliche Zeitzonen benötigen, z. B. basierend auf einer Benutzerzeitzone, können Sie diese mit einem before_filter in Ihrem Controller ändern.
Stellen Sie einfach sicher, dass Sie alle Ihre Zeiten in der Datenbank als UTC speichern und alles wird süß.
quelle
Time.zone=
ist threadsicher github.com/rails/rails/blob/master/activesupport/lib/… .