In meinem application.rb
bin ich auf folgenden Kommentar gestoßen
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
config.time_zone = 'Eastern Time (US & Canada)'
Wie Sie von oben sehen, habe ich config.time_zone
EST-Zeit gemacht. Wenn jedoch Datensätze in der Datenbank erstellt werden, sieht es so aus, datetime
als würden sie im UTC-Format gespeichert.
Im obigen Kommentar heißt es
... und Active Record automatisch in diese Zone konvertieren lassen ...
Wie und wo kann ich das machen?
Außerdem werde ich dies auch auf Heroku bereitstellen und ich möchte, dass die Einstellung übernommen wird
ruby-on-rails
ruby
timezone
rails-activerecord
Allgegenwärtig
quelle
quelle
Antworten:
Ich habe beschlossen, diese Antwort zusammenzustellen, da alle anderen unvollständig zu sein scheinen.
Wenn Sie die Rails- Zeitzone ändern möchten , aber weiterhin Active Record in der Datenbank in UTC speichern möchten , verwenden Sie
Wenn Sie die Rails- Zeitzone ändern UND Active Record- Speicherzeiten in dieser Zeitzone haben möchten , verwenden Sie
Warnung : Sie sollten wirklich zweimal überlegen, sogar dreimal, bevor Sie Zeiten in der Datenbank in einem Nicht-UTC-Format speichern.
Denken Sie daran, dass
config.active_record.default_timezone
dies nur zwei Werte annehmen kannconfig.time_zone
)So finden Sie alle verfügbaren Zeitzonen
quelle
datetime
Werte in UTC in der Datenbank zu speichern und sie dann einfach im Frontend wie mitmoment.js
oder zu ändern, was schlagen Sie vor, um diese Daten für jeden Benutzer in der richtigen Zeitzone anzuzeigen?Hinzufügen von Folgendem zu
application.rb
Werkenquelle
config.time_zone = 'London'
config.active_record.default_timezone = :local
rails c
-ActiveSupport::TimeZone.all.map(&:name)
config.time_zone = 'Central Time (US & Canada)'
config.active_record.default_timezone = 'Central Time (US & Canada)'
aber es auf das lokale Symbol zu setzen, hat den Trick getan.config.active_record.default_timezone
nur auf:local
oder eingestellt werden sollte:utc
. Ich gehe davon aus, dass alles andere unerwartete Ergebnisse haben würde.rake time:zones:all
Ich kam nach viel Angst zu dem gleichen Schluss wie Dean Perry.
config.time_zone = 'Adelaide'
undconfig.active_record.default_timezone = :local
war die Gewinnkombination. Folgendes habe ich während des Prozesses gefunden.quelle
In meinem Fall (Rails 5) habe ich diese 2 Zeilen in mein hinzugefügt
app/config/environments/development.rb
Das ist es! Und um sicherzustellen, dass Melbourne korrekt gelesen wurde, habe ich den Befehl in meinem Terminal ausgeführt:
bundle exec rake time:zones:all
und Melbourne war in der Zeitzone gelistet, in der ich bin!
quelle
Wenn Sie die Zeitzone global auf UTC einstellen möchten, können Sie in Rails 4 Folgendes tun:
Stellen Sie sicher, dass Sie Ihre Anwendung neu starten, da sonst die Änderungen nicht angezeigt werden.
quelle
Gehen Sie auf Schienen 4.2.2 zu
application.rb
und verwenden Sieconfig.time_zone='city'
(z. B. "London" oder "Bukarest" oder "Amsterdam" usw.).Es sollte gut funktionieren. Es hat bei mir funktioniert.
quelle
Ich musste diesen Block zu meiner
environment.rb
Datei hinzufügen und alles war gut :)Rails.application.initialize!
quelle
Fügen Sie für chinesische Benutzer einfach zwei Zeilen hinzu
config/application.rb
:quelle
Gehen Sie in Ruby on Rails 6.0.1 zu config > locales > application.rb y agrega lo siguiente:
Sie können sehen, dass ich die Zeitzone mit 2 Zeilen konfiguriere:
Ich hoffe, es hilft denen, die mit Ruby on Rails 6.0.1 arbeiten
quelle
Wenn Sie die Ortszeit einstellen möchten, fügen Sie den folgenden Text hinzu
application.rb
Starten Sie dann Ihren Server neu
quelle