Saya mengalami masalah saat mengonversi UTC Time
atau TimeWithZone
ke waktu lokal di Rails 3.
Katakanlah moment
beberapa Time
variabel dalam UTC (misalnya moment = Time.now.utc
). Bagaimana cara mengonversi moment
ke zona waktu saya, mengurus DST (yaitu menggunakan EST / EDT)?
Lebih tepatnya, saya ingin mencetak "Senin 14 Maret, 09.00" jika waktunya sesuai dengan pagi ini pukul 09.00 EDT dan "Senin 07 Maret, 09.00" jika waktunya adalah pukul 09.00 EST Senin lalu.
Semoga ada cara lain?
Sunting : Saya pertama kali berpikir bahwa "EDT" harus menjadi zona waktu yang dikenali, tetapi "EDT" bukanlah zona waktu yang sebenarnya, lebih seperti keadaan zona waktu. Misalnya, tidak masuk akal untuk meminta Time.utc(2011,1,1).in_time_zone("EDT")
. Agak membingungkan, karena "EST" adalah zona waktu aktual, digunakan di beberapa tempat yang tidak menggunakan waktu musim panas dan (UTC-5) selama setahun.
sumber
(new Date()).getTimeZoneOffset()
. Tapi itu cukup tidak konsisten, jadi orang ini sepertinya telah menulisnya sendiri: onlineaspect.com/2007/06/08/…config.time_zone = 'Wellington'
dan kemudian menggunakan Time.current (yang setara dengan waktu.sekarang tetapi menggunakan Zona Waktu yang telah Anda tetapkan)Time#localtime
akan memberi Anda waktu dalam zona waktu saat ini dari mesin yang menjalankan kode:Pembaruan: Jika Anda ingin mengkonversi ke zona waktu tertentu daripada zona waktu Anda sendiri, Anda berada di jalur yang benar. Namun, alih-alih mengkhawatirkan EST vs EDT, cukup lewati zona Waktu Timur umum - ia akan tahu berdasarkan hari apakah itu EDT atau EST:
sumber
in_time_zone
metode dengan zona waktu mereka.Time.now.localtime
bekerja pada sesi irb normal tetapi ketika saya mencoba menjalankannya pada mesin yang berada dalam zona waktu UTC, itu tidak berfungsi.Sangat mudah untuk mengkonfigurasinya menggunakan zona lokal sistem Anda, Hanya di aplikasi Anda. Rb tambahkan ini
Kemudian, rel harus menunjukkan stempel waktu di waktu lokal Anda atau Anda dapat menggunakan sesuatu seperti instruksi ini untuk mendapatkan waktu lokal
sumber
Sebenarnya ada Permata bagus yang disebut
local_time
oleh basecamp untuk melakukan semua itu hanya di sisi klien, saya percaya:https://github.com/basecamp/local_time
sumber
Tidak tahu mengapa tetapi dalam kasus saya itu tidak berfungsi seperti yang disarankan sebelumnya. Tetapi cara kerjanya seperti ini:
Tentu saja Anda perlu mengubah
offset
nilai menjadi milik Anda.sumber
Jika Anda benar-benar melakukannya hanya karena Anda ingin mendapatkan zona waktu pengguna, maka yang harus Anda lakukan adalah mengubah zona waktu Anda
config/applications.rb
.Seperti ini:
Rails, secara default, akan menyimpan catatan waktu Anda dalam UTC meskipun Anda menentukan zona waktu saat ini.
Jadi hanya ini yang harus Anda lakukan dan Anda siap melakukannya.
sumber