使用Rails输入时间+时区

时间:2011-10-10 20:22:15

标签: ruby-on-rails timezone

我想要一个包含时区字段的特定时间。这可能吗?

目前我正在使用它来检索时间:

<%= f.time_select :meeting_time %>
<%= f.time_zone_select :timezone %>

这是为了尝试更改时区:

meeting_time.in_time_zone(params[:meeting][:timezone])

但是当用户输入时间时,它将自动设置为rails服务器上的时区(在本例中为GMT)。然后,如果用户选择例如GMT-1,它将把时间减少一个小时,但我想要的是增加它所以所有时间都以GMT显示。

示例:

用户输入18:00 GMT-1,f.time_select将其设置为18:00 UTC。接下来,我尝试将其转换为GMT-1,但由于它已经在UTC中,它将给我17:00 GMT-1而不是19:00 GMT,我想要。

注意:我不一定要在GMT中显示所有时间,但我不认为我可以在不更改服务器时区的情况下以其他格式保存

1 个答案:

答案 0 :(得分:3)

我不确定这是否是正确的rails惯例,但这是一个似乎对我来说工作正常的解决方法。

如果在将本地时间保存到数据库之前将其更改为utc,则无论服务器时区如何,都应将其保存为正确的utc时间。

为当前请求设置Time.zone

    Time.zone = params[:meeting][:timezone]

调整为utc

    meeting_time = Time.zone.local_to_utc meeting_time