【发布时间】:2011-05-10 14:57:08
【问题描述】:
我有一个带有name、start_time 和end_time 字段的Event 模型的编辑视图。我的视图是一个大致如下的表格:
# ...
# form with:
# - event name
# - datetime_select for event start_time (in business's local time zone)
# - datetime_select for event end_time (in business's local time zone)
现在,问题来了:start_time 和 end_time 附加了一个时区,但是当我们渲染视图时该时间丢失了,因为 datetime_select 不包含时区字段。结果是我们有一个“UTC 时间”,它实际上是除去其时区的本地时间。
回顾一下,当我们在视图中渲染表单时,情况看起来像这样,然后立即提交而不做任何更改:
db time: 2011-05-15 @ 1100 UTC
converted to local time: 2011-05-15 @ 0600 CDT
time stored in view: 2011-05-15 @ 0600 UTC (time zone info lost)
time posted back to db: 2011-05-15 @ 0600 UTC
请注意,存储的时间最初是 1100 UTC,但现在是 0600 UTC,即使我们没有进行任何更改。这是一个严重的错误。
我们可以在这里采取多种方法。发布到视图时避免丢失时区的最聪明方法是什么? (请注意,模型可能会以发布表单以外的方式进行更新——例如,通过 API。)
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 timezone