помощник формы time_select интерпретирует новый объект времени как UTC, а не настроенный часовой пояс - PullRequest
5 голосов
/ 05 января 2012

Я сталкиваюсь с тем, что мне кажется простой проблемой, но я не могу понять, что я делаю неправильно. В моем приложении пользователи могут добавить свой курс через простую форму 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 на восточное время, и, похоже, это работает правильно, так как созданный_каталог возвращается в правильном часовом поясе.

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

Ответы [ 2 ]

2 голосов
/ 09 октября 2013

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

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

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

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

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

0 голосов
/ 21 мая 2015

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

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

course.start_time.hour
course.start_time.min

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...