W moim application.rb
natrafiłem na następujący komentarz
# 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)'
Jak widać z góry, dotarłem config.time_zone
do czasu EST. Jednak nadal, gdy rekordy są tworzone w DB, wygląda na to, że datetime
są przechowywane w formacie UTC.
W powyższym komentarzu mówią
... i wykonaj automatyczną konwersję modułu Active Record do tej strefy ...
Jak mogę to zrobić i gdzie?
Wdrożę to również na heroku i chciałbym, aby to ustawienie zostało przeniesione
ruby-on-rails
ruby
timezone
rails-activerecord
Wszechobecny
źródło
źródło
Odpowiedzi:
Zdecydowałem się skompilować tę odpowiedź, ponieważ wszystkie inne wydają się niekompletne.
Jeśli chcesz zmienić strefę czasową Railsów , ale nadal chcesz zapisywać Active Record w bazie danych w UTC , użyj
Jeśli chcesz zmienić strefę czasową Rails ORAZ mieć czas przechowywania Active Record w tej strefie czasowej, użyj
Ostrzeżenie : naprawdę powinieneś pomyśleć dwa razy, a nawet trzykrotnie, zanim zapiszesz czasy w bazie danych w formacie innym niż UTC.
Pamiętaj, że
config.active_record.default_timezone
mogą przyjmować tylko dwie wartościconfig.time_zone
)Oto, jak możesz znaleźć wszystkie dostępne strefy czasowe
źródło
datetime
wartości w UTC w bazie danych, a następnie po prostu zmieniać je w interfejsie użytkownika, jak za pomocąmoment.js
lub co sugerujesz, aby wyświetlać te dane we właściwej strefie czasowej dla dowolnego użytkownika?dodawanie kolejnych
application.rb
pracźródło
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)'
nie dało : ale ustawienie go na: lokalny symbol załatwiło sprawę.config.active_record.default_timezone
powinno być ustawione tylko na:local
lub:utc
. Zakładam, że cokolwiek innego przyniosłoby nieoczekiwane rezultaty.rake time:zones:all
Po wielu udrękach doszedłem do tego samego wniosku, co Dean Perry.
config.time_zone = 'Adelaide'
iconfig.active_record.default_timezone = :local
była zwycięską kombinacją. Oto, co znalazłem podczas tego procesu.źródło
W moim przypadku (Rails 5) dodałem te 2 linie do pliku
app/config/environments/development.rb
Otóż to! Aby upewnić się, że Melbourne zostało poprawnie odczytane, uruchomiłem polecenie w moim terminalu:
bundle exec rake time:zones:all
a Melbourne znajdowało się w strefie czasowej, w której się znajduję!
źródło
Jeśli chcesz ustawić globalną strefę czasową na UTC, możesz wykonać następujące czynności w Rails 4:
Pamiętaj, aby ponownie uruchomić aplikację, w przeciwnym razie nie zobaczysz zmian.
źródło
Na torach 4.2.2 przejdź do
application.rb
i użyjconfig.time_zone='city'
(np. „Londyn”, „Bukareszt” lub „Amsterdam” itd.).Powinno działać dobrze. U mnie zadziałało.
źródło
Musiałem dodać ten blok do mojego
environment.rb
pliku i wszystko było dobrze :)Rails.application.initialize!
źródło
dla chińskiego użytkownika wystarczy dodać dwie linie poniżej
config/application.rb
:źródło
W Ruby on Rails 6.0.1 idź do config > locales > application.rb y agrega lo siguiente:
Widać, że konfiguruję strefę czasową za pomocą 2 linii:
Mam nadzieję, że pomoże to tym, którzy pracują z Ruby on Rails 6.0.1
źródło
Jeśli chcesz ustawić czas lokalny, dodaj następujący tekst w
application.rb
Następnie zrestartuj serwer
źródło