В течение некоторого времени я бился головой о часовые пояса в Rails. Вот вопрос:
Я хочу, чтобы пользователи могли вводить в поле time_select
местное время (например, 9:30 утра). Исходя из выбранного часового пояса пользователя, он должен быть сохранен в базе данных как UTC (например, 9:30 AM EST сохраняется как 14:30)
Тогда для правильного отображения нужно только Time.zone
.
Однако, похоже, что time_select
создает хэш многопараметрических значений присваивания, который предполагает, что время, введенное пользователем, указано в UTC. Независимо от того, что я пытаюсь, я не могу привести это к местному времени пользователя. Например:
ruby-1.9.2-p290 :016 > Time.use_zone("Eastern Time (US & Canada)") do
ruby-1.9.2-p290 :017 > a.attributes = {"starttime(1i)"=>"2000", "starttime(2i)"=>"1", "starttime(3i)"=>"1", "starttime(4i)"=>"09", "starttime(5i)"=>"30"}
ruby-1.9.2-p290 :018?> end
=> {"starttime(1i)"=>"2000", "starttime(2i)"=>"1", "starttime(3i)"=>"1", "starttime(4i)"=>"09", "starttime(5i)"=>"30"}
ruby-1.9.2-p290 :019 > a.starttime
=> 2000-01-01 09:30:00 UTC
Я видел рекомендации по использованию config.time_zone
, но я хочу, чтобы это работало для пользователей в нескольких часовых поясах, поэтому настройка конфигурации для всего сайта не выглядит правильным решением.
Как сохранить введенное пользователем значение в базе данных как UTC?
Спасибо!