我遇到的对我来说似乎是一个简单的问题,但我无法弄清楚我做错了什么。在我的应用中,用户可以通过简单的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点开始的班级时,将其输入为10 UTC而不是10 AM EST / 15:00 UTC。我在这里错过了什么?似乎我想要发生的事情应该是可能的。
答案 0 :(得分:2)
总结评论中的答案,以便从“未答复”过滤器中删除此问题:
Tim Brandes建议:
也许这会对你有所帮助:Timezone with rails 3 ...在处理时区时,我从未使用过time_select但总是使用datetime_select,这可能是一个问题,但似乎不太可能。
适用于Philip V的解决方案:
我的start_time和end_time没有在时区内保存,而是保存为UTC时间。 ...我将start_time和end_time的列类型更改为datetime,这解决了我遇到的问题。我猜时间列只允许UTC。
答案 1 :(得分:0)
我正在努力解决同样的问题。但后来我意识到我不需要Time对象的时区信息。
正如您所说,数据库将其存储为UTC,但我们需要对此数据执行的非常重要的事情是:
course.start_time.hour
course.start_time.min
这与时区无关。 (8小时是午夜8小时,无论你比较的是什么午夜.30小时是从小时0分钟开始的30分钟。无论你在哪个时区使用)。
因此,在大多数需要时间存储结构的应用中,比如知道重复事件何时开始或结束,存储定时器的值,或者是时间在比赛中,你可以使用数据库返回的UTC时间没有问题。