Dalam buku saya, application.rb
saya menemukan komentar berikut
# 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)'
Seperti yang Anda lihat dari atas, saya membuat config.time_zone
waktu EST. Namun, masih ketika catatan dibuat dalam DB, sepertinya datetime
disimpan dalam format UTC.
Dalam komentar di atas, kata mereka
... dan buat Rekaman Aktif otomatis dikonversi ke zona ini ...
Bagaimana saya bisa melakukan itu, dan di mana?
Juga, saya akan menyebarkan ini pada heroku juga dan saya ingin pengaturan untuk melanjutkan
ruby-on-rails
ruby
timezone
rails-activerecord
Di mana-mana
sumber
sumber
Jawaban:
Saya telah memutuskan untuk menyusun jawaban ini karena semua yang lain tampaknya tidak lengkap.
Jika Anda ingin mengubah zona waktu Rails , tetapi terus menyimpan Rekaman Aktif dalam database dalam UTC , gunakan
Jika Anda ingin mengubah zona waktu Rails dan memiliki waktu penyimpanan Rekaman Aktif di zona waktu ini, gunakan
Peringatan : Anda benar-benar harus berpikir dua kali, bahkan tiga kali, sebelum menghemat waktu dalam database dalam format non-UTC.
Ingatlah bahwa
config.active_record.default_timezone
hanya dapat mengambil dua nilaiconfig.time_zone
)Inilah cara Anda dapat menemukan semua zona waktu yang tersedia
sumber
datetime
nilai dalam UTC dalam database dan kemudian mengubahnya di frontend sepertimoment.js
atau dengan apa yang Anda sarankan untuk menampilkan data ini di zona waktu yang benar untuk setiap pengguna?menambahkan berikut ke
application.rb
karyasumber
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)'
tetapi mengaturnya ke: simbol lokal melakukan trik.config.active_record.default_timezone
seharusnya hanya disetel ke:local
atau:utc
. Saya berasumsi bahwa hal lain akan memiliki hasil yang tidak terduga.rake time:zones:all
Saya sampai pada kesimpulan yang sama dengan Dean Perry setelah banyak kesedihan.
config.time_zone = 'Adelaide'
danconfig.active_record.default_timezone = :local
merupakan kombinasi pemenang. Inilah yang saya temukan selama proses.sumber
Dalam kasus saya (Rails 5), saya akhirnya menambahkan 2 baris ini di
app/config/environments/development.rb
Itu dia! Dan untuk memastikan bahwa Melbourne dibaca dengan benar, saya menjalankan perintah di terminal saya:
bundle exec rake time:zones:all
dan Melbourne terdaftar di zona waktu tempat saya berada!
sumber
Jika Anda ingin mengatur zona waktu ke UTC secara global, Anda dapat melakukan hal berikut di Rails 4:
Pastikan untuk memulai kembali aplikasi Anda atau Anda tidak akan melihat perubahannya.
sumber
Pada kereta 4.2.2, pergi
application.rb
dan gunakanconfig.time_zone='city'
(misalnya: 'London' atau 'Bucharest' atau 'Amsterdam' dan sebagainya).Seharusnya itu berjalan baik baik saja. Ini berhasil untuk saya.
sumber
Saya harus menambahkan blok ini ke
environment.rb
file saya dan semuanya baik-baik saja :)Rails.application.initialize!
sumber
untuk pengguna China, cukup tambahkan dua baris di bawah ini untuk Anda
config/application.rb
:sumber
Di Ruby on Rails 6.0.1 buka config > locales > application.rb y agrega lo siguiente:
Anda dapat melihat bahwa saya mengonfigurasi zona waktu dengan 2 baris:
Saya harap ini membantu mereka yang bekerja dengan Ruby on Rails 6.0.1
sumber
Jika Anda ingin waktu lokal diatur, tambahkan teks berikut ini di
application.rb
Kemudian restart server Anda
sumber