Помощник формы time_select интерпретирует новый объект времени как UTC, а не как настроенный часовой пояс

Я столкнулся с тем, что мне кажется простой проблемой, но я не могу понять, что я делаю неправильно. В моем приложении пользователи могут добавить свой курс через простую форму form_for. Они могут ввести start_time и end_time для лекций курса, например:

<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>

Я настроил свой часовой пояс в application.rb на восточное время, и это, кажется, работает правильно, поскольку created_at возвращается в правильном часовом поясе.

Однако проблема, с которой я сталкиваюсь, заключается в том, что start_time и end_time вводятся в базу данных как UTC. Поэтому, когда пользователь выбирает занятие для начала в 10:00, оно вводится как 10 UTC, а не 10:00 EST / 15:00 UTC. Что мне здесь не хватает? Кажется, что то, что я хочу, должно быть возможным.


person Philip V    schedule 05.01.2012    source источник
comment
Возможно, это поможет вам: stackoverflow.com/questions/4362663/timezone-with-rails-3   -  person Tim Brandes    schedule 05.01.2012
comment
Я на самом деле думаю, что у меня противоположная проблема. Мои start_time и end_time не сохраняются в часовом поясе, а сохраняются как время UTC.   -  person Philip V    schedule 05.01.2012
comment
Я никогда не использовал time_select, но всегда использовал datetime_select при работе с часовыми поясами, возможно, это может быть проблемой, но это кажется маловероятным.   -  person Tim Brandes    schedule 05.01.2012
comment
Ваша идея на самом деле направила меня на правильный путь. Я изменил тип столбца для start_time и end_time на datetime, и это устранило проблемы, которые у меня были. Я предполагаю, что столбцы времени позволяют использовать только UTC.   -  person Philip V    schedule 05.01.2012
comment
@TimBrandes или PhilipV - Если вы хотите резюмировать решение как свой собственный ответ, я удалю свой ответ. (См. meta.stackexchange.com/questions/90263. / за разъяснения, почему это полезно.) Спасибо!   -  person DreadPirateShawn    schedule 09.10.2013


Ответы (2)


Обобщая ответ из комментариев, чтобы удалить этот вопрос из фильтра «Без ответа»:

Предложено Тимом Брандесом:

Возможно, это поможет вам: Часовой пояс с рельсами 3... Я никогда не использовал time_select, но всегда a datetime_select при работе с часовыми поясами, возможно, это может быть проблемой, но это кажется маловероятным.

Решение, которое сработало для Philip V:

Мои start_time и end_time не сохраняются в часовом поясе, а сохраняются как время UTC. ... Я изменил тип столбца для start_time и end_time на дату и время, и это устранило проблемы, которые у меня были. Я предполагаю, что столбцы времени позволяют использовать только UTC.

person DreadPirateShawn    schedule 09.10.2013

Я боролся с той же проблемой. Но потом я понял, что мне не нужна информация о часовом поясе объекта Time.

Как вы сказали, база данных хранит его как UTC, но действительно важная вещь, которую нам нужно сделать с этими данными, это:

course.start_time.hour
course.start_time.min

Это не зависит от часового пояса. (8 часов — это 8 часов с полуночи, независимо от того, какую полночь вы сравниваете. 30 минут — это 30 минут с нулевой минуты часа. Независимо от того, в каком часовом поясе этот час вы используете).

Таким образом, в большинстве приложений, где требуется структура хранения времени, например, чтобы знать, когда начинается или заканчивается повторяющееся событие, чтобы сохранить значение таймера или время круга в расы, вы можете использовать время UTC, которое база данных возвращает без проблем.

person João Paulo Motta    schedule 20.05.2015