In meinem application.rb
stieß ich auf den folgenden Kommentar
# 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
zu EST gemacht. Wenn jedoch Datensätze in der Datenbank erstellt werden, sieht es so aus, als würde datetime
im UTC-Format gespeichert.
In dem obigen Kommentar heißt es
... und Active Record automatisch in diese Zone konvertieren ...
Wie mache ich das und wo?
Ich werde dies auch auf Heroku bereitstellen und ich möchte, dass die Einstellung übernommen wird
folgendes zu application.rb
Works hinzufügen
config.time_zone = 'Eastern Time (US & Canada)'
config.active_record.default_timezone = :local # Or :utc
Ich habe beschlossen, diese Antwort zusammenzustellen, da alle anderen unvollständig zu sein scheinen.
config.active_record.default_timezone legt fest, ob Time.local (wenn auf: local gesetzt) oder Time.utc (wenn auf: utc gesetzt) zum Abrufen von Datums- und Uhrzeitangaben aus der Datenbank verwendet werden soll. Die Standardeinstellung lautet: utc. http://guides.rubyonrails.org/configuring.html
Wenn Sie Rails Zeitzone ändern möchten, aber weiterhin Active Record in der Datenbank speichern möchten, in [~ # ~] utc [~ # ~], benutze
# application.rb
config.time_zone = 'Eastern Time (US & Canada)'
Wenn Sie ändern möchten Rails Zeitzone [~ # ~] und [~ # ~] haben Active Record Zeiten speichern Verwenden Sie in dieser Zeitzone
# application.rb
config.time_zone = 'Eastern Time (US & Canada)'
config.active_record.default_timezone = :local
Warnung: Sie sollten wirklich zweimal überlegen, bevor Sie die Zeiten in der Datenbank in einem Nicht-UTC-Format speichern.
Hinweis
Vergessen Sie nicht, Ihren Rails nach dem Ändern vonapplication.rb
Neu zu starten.
Denken Sie daran, dass config.active_record.default_timezone
Nur zwei Werte annehmen kann
config.time_zone
definierte Zeitzone)So finden Sie alle verfügbaren Zeitzonen
rake time:zones:all
Ich kam zu der gleichen Schlussfolgerung wie Dean Perry, nachdem ich große Angst hatte. config.time_zone = 'Adelaide'
und config.active_record.default_timezone = :local
waren die gewinnende Kombination. Hier ist was ich gefunden habe während des Prozesses.
In meinem Fall (Rails 5) habe ich diese 2 Zeilen in meinem app/config/environments/development.rb
hinzugefügt.
config.time_zone = "Melbourne"
config.active_record.default_timezone = :local
Das ist es! Und um sicherzustellen, dass Melbourne richtig gelesen wurde, habe ich den Befehl in meinem Terminal ausgeführt:
bundle exec rake time:zones:all
und Melbourne notierte in der Zeitzone, in der ich bin!
Wenn Sie die Zeitzone global auf UTC setzen möchten, können Sie in Rails 4 Folgendes tun:
# Inside config/application.rb
config.time_zone = "UTC"
config.active_record.default_timezone = :utc
Stellen Sie sicher, dass Sie Ihre Anwendung neu starten, sonst werden die Änderungen nicht angezeigt.
Gehen Sie in Rail 4.2.2 zu application.rb
und verwenden Sie config.time_zone='city'
(z. B. London oder Bukarest oder Amsterdam usw.).
Es sollte gut funktionieren. Es hat für mich funktioniert.
Ich musste diesen Block meiner environment.rb
-Datei hinzufügen und alles war gut :)
Rails.application.configure do
config.time_zone = "Pacific Time (US & Canada)"
config.active_record.default_timezone = :local
end
Rails.application.initialize!
hinzugefügt.für chinesische Benutzer fügen Sie einfach zwei Zeilen unten hinzu config/application.rb
:
config.active_record.default_timezone = :local
config.time_zone = 'Beijing'