webentwicklung-frage-antwort-db.com.de

Wie kann man die Standardzeitzone für Active Record in Rails ändern?

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

116
Omnipresent

folgendes zu application.rb Works hinzufügen

 config.time_zone = 'Eastern Time (US & Canada)'
 config.active_record.default_timezone = :local # Or :utc
164
Omnipresent

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 von application.rb Neu zu starten.


Denken Sie daran, dass config.active_record.default_timezone Nur zwei Werte annehmen kann

  • : local (konvertiert in die in config.time_zone definierte Zeitzone)
  • : utc (konvertiert in UTC)

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.

34
James Barona

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!

17
Carole

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.

9
sergserg

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.

2
Andrei Laslo

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
  • Ich habe es vor der Zeile Rails.application.initialize! hinzugefügt.
2
Taylor A. Leach

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'