time_select form helper menafsirkan objek waktu baru sebagai UTC bukan sebagai zona waktu yang dikonfigurasi

Saya mengalami masalah yang bagi saya tampak seperti masalah sederhana, tetapi saya tidak tahu apa kesalahan yang saya lakukan. Di aplikasi saya, pengguna dapat menambahkan kursus mereka melalui form_for sederhana. Mereka dapat memasukkan waktu_mulai dan waktu_akhir perkuliahan suatu mata kuliah, seperti:

<div class="field">
  Start Time<br />
  <%= time_select :course, :start_time, { :minute_step => 5, :ampm => true } %>
</div>

<div class="field">
  End Time<br />
  <%= time_select :course, :end_time, { :minute_step => 5, :ampm => true } %>
</div>

Saya mengonfigurasi zona waktu saya di application.rb untuk disetel ke Waktu Bagian Timur dan ini tampaknya berfungsi dengan benar karena create_at dikembalikan dalam zona waktu yang tepat.

Namun, masalah yang saya temui adalah waktu_mulai dan waktu_akhir dimasukkan sebagai UTC ke dalam database. Jadi ketika pengguna memilih kelas untuk dimulai pada jam 10 pagi, kelas tersebut dimasukkan sebagai 10 UTC bukan 10 AM EST / 15:00 UTC. Apa yang kulewatkan di sini? Sepertinya apa yang saya inginkan harus terjadi.


person Philip V    schedule 05.01.2012    source sumber
comment
Mungkin ini membantu Anda: stackoverflow.com/questions/4362663/timezone-with-rails-3   -  person Tim Brandes    schedule 05.01.2012
comment
Saya sebenarnya berpikir saya memiliki masalah sebaliknya. Waktu_mulai dan waktu_akhir saya tidak disimpan dalam zona waktu tetapi disimpan sebagai waktu UTC.   -  person Philip V    schedule 05.01.2012
comment
Saya belum pernah menggunakan time_select tetapi selalu datetime_select ketika berhadapan dengan zona waktu, mungkin ini bisa menjadi masalah, tetapi sepertinya tidak mungkin.   -  person Tim Brandes    schedule 05.01.2012
comment
Ide Anda benar-benar menempatkan saya di jalur yang benar. Saya mengubah jenis kolom untuk start_time dan end_time menjadi datetime dan ini memperbaiki masalah yang saya alami. Saya kira kolom waktu hanya mengizinkan UTC.   -  person Philip V    schedule 05.01.2012
comment
@TimBrandes atau PhilipV - Jika Anda ingin merangkum solusi sebagai jawaban Anda sendiri, saya akan menghapus jawaban saya. (Lihat meta.stackexchange.com/questions/90263 / untuk penjelasan mengapa ini berguna.) Terima kasih!   -  person DreadPirateShawn    schedule 09.10.2013


Jawaban (2)


Meringkas jawaban dari komentar untuk menghapus pertanyaan ini dari filter "Belum Terjawab":

Disarankan oleh Tim Brandes:

Mungkin ini membantu Anda: Zona waktu dengan rel 3 ... Saya belum pernah menggunakan time_select tetapi selalu a datetime_select ketika berhadapan dengan zona waktu, mungkin ini bisa menjadi masalah, tapi sepertinya tidak mungkin.

Solusi yang berhasil untuk Philip V:

Waktu_mulai dan waktu_akhir saya tidak disimpan dalam zona waktu tetapi disimpan sebagai waktu UTC. ... Saya mengubah jenis kolom untuk start_time dan end_time menjadi datetime dan ini memperbaiki masalah yang saya alami. Saya kira kolom waktu hanya mengizinkan UTC.

person DreadPirateShawn    schedule 09.10.2013

Saya berjuang dengan masalah yang sama. Tapi kemudian saya menyadari bahwa saya tidak memerlukan informasi zona waktu dari objek Waktu.

Seperti yang Anda katakan, database menyimpannya sebagai UTC, namun hal terpenting yang perlu kita lakukan dengan data ini adalah:

course.start_time.hour
course.start_time.min

Ini tidak bergantung pada zona waktu. (8 jam adalah 8 jam dari tengah malam, tidak peduli tengah malam berapa yang Anda bandingkan. 30 menit adalah 30 menit dari menit 0 pada jam tersebut. Tidak peduli di zona waktu mana jam tersebut Anda gunakan).

Jadi di sebagian besar aplikasi yang memerlukan struktur penyimpanan Waktu, seperti mengetahui kapan peristiwa berulang dimulai atau selesai, untuk menyimpan nilai pengatur waktu, atau waktu putaran dalam suatu balapan, Anda dapat menggunakan Waktu UTC yang dikembalikan database tanpa masalah.

person João Paulo Motta    schedule 20.05.2015