created_at
Stempel waktu saya disimpan dalam UTC:
>> Annotation.last.created_at
=> Sat, 29 Aug 2009 23:30:09 UTC +00:00
Bagaimana cara mengonversi salah satunya ke 'Waktu Bagian Timur (AS & Kanada)' (dengan memperhitungkan penghematan siang hari)? Sesuatu seperti:
Annotation.last.created_at.in_eastern_time
ruby-on-rails
ruby
datetime
Tom Lehman
sumber
sumber
now.in_time_zone(3)
created_at.in_time_zone("EST")
lebih pendekMeskipun ini adalah pertanyaan lama, ada baiknya menyebutkan sesuatu. Dalam balasan sebelumnya , disarankan untuk menggunakan before_filter untuk menyetel zona waktu untuk sementara.
Anda tidak boleh melakukan itu karena Time.zone menyimpan informasi di utas, dan mungkin akan bocor ke permintaan berikutnya yang ditangani oleh utas itu.
Sebagai gantinya Anda harus menggunakan around_filter untuk memastikan bahwa Time.zone disetel ulang setelah permintaan selesai. Sesuatu seperti:
Baca lebih lanjut tentang ini di sini
sumber
Jika Anda menambahkan ini ke file
/config/application.rb
Lalu Anda bisa sel
untuk mendapatkan waktu dalam zona waktu yang ditentukan.
sumber
Jika Anda mengkonfigurasi file
/config/application.rb
sumber
Setel zona waktu Anda ke Waktu Bagian Timur.
Anda dapat menyetel zona waktu default Anda di config / environment.rb
Sekarang semua catatan yang Anda keluarkan akan berada di zona waktu itu. Jika Anda membutuhkan zona waktu yang berbeda, katakanlah berdasarkan zona waktu pengguna, Anda dapat mengubahnya dengan before_filter di pengontrol Anda.
Pastikan Anda menyimpan semua waktu Anda di database sebagai UTC dan semuanya akan menyenangkan.
sumber
Time.zone=
adalah thread-safe github.com/rails/rails/blob/master/activesupport/lib/… .