time_select form helper将新时间对象解释为UTC而不是配置的时区

我遇到的对我来说似乎是一个简单的问题,但我无法弄清楚我做错了什么。 在我的应用中,用户可以通过简单的form_for添加他们的课程。 他们可以输入课程讲座的start_time和end_time,如下所示:

Start Time
5, :ampm => true } %>
End Time
5, :ampm => true } %>

我将application.rb中的时区配置为设置为东部时间,这似乎正常工作,因为在正确的时区返回created_at。

但是,我遇到的问题是start_time和end_time作为UTC输入到数据库中。 因此,当用户选择在上午10点开始的类时,输入为10 UTC而不是10 AM EST / 15:00 UTC。 我在这里想念的是什么? 似乎我想要发生的事情应该是可能的。

总结评论中的答案,以便从“未答复”filter中删除此问题:

Tim Brandes建议:

也许这会对你有所帮助: 带有rails 3的时区 …我从来没有使用过time_select但是在处理时区时总是使用datetime_select,也许这可能是一个问题,但似乎不太可能。

适用于Philip V的解决方案:

我的start_time和end_time没有在时区内保存,而是保存为UTC时间。 …我将start_time和end_time的列类型更改为datetime,这解决了我遇到的问题。 我猜时间列只允许UTC。

我正在努力解决同样的问题。 但后来我意识到我不需要Time对象的时区信息。

正如您所说,数据库将其存储为UTC,但我们需要对此数据执行的非常重要的事情是:

 course.start_time.hour course.start_time.min 

这与时区无关。 (8小时是午夜8小时,无论你比较的是什么午夜.30小时是从小时0分钟开始的30分钟。无论你使用的那个小时是什么时区)。

因此,在需要时间存储结构的大多数应用中,比如知道重复事件何时开始或结束,存储计时器的值,或者在比赛中的一圈时间,您可以使用UTC数据库返回的时间没有问题。