Saving a Rails Record with a specific Timezone
如何在柏林以自己的特定时区和下一次在蒂华纳举办的活动中保存一个不同的活动?
要求用户为该事件选择一个城市,作为例如来源的用户。+02:00。
我想收到这样的时间代码:
1
| eventstart ="2011-07-22T18:00:00+02:00" |
您将如何创建该表单?
更新:
由于许多原因,实现了标准UTC的保存很好。 所以现在我在视图中改变一个时间字符串,为eventstart提供* distance_to_time_in_words *,具体取决于用户的本地时间。
来自柏林时间的蒂华纳活动:
1 2 3 4 5 6 7 8 9
| old_zone = Time.zone
#=>"Berlin"
Time.zone ="Tijuana"
t = Time.zone.parse(eventstart.to_s[0..-7])
#=> 2011-07-22 18:00:00 +08:00
Time.zone = old_zone
#=>"Berlin"
distance_of_time_in_words(Time.now.in_time_zone, t)
#=>"9 hours" |
繁琐,但现在工作。 欢迎改进的想法!
将time_zone列添加到数据库并在表单中使用time_zone_select,让用户选择要为其创建事件的time_zone。
在模型中,您可以将日期时间转换为特定于区域的日期时间,并将utc存储在数据库中。 您可以使用类似下面的帮助程序
1 2 3 4 5
| def local_time(date)
Time.use_zone(self.time_zone) do
Time.zone.at(date.to_i)
end
end |
-
刚刚在模型def local_time(date) Time.use_zone("Paris") do Time.zone.at(date.to_i) end end中对此进行了测试。从视图<%= @event.local_time("2011-07-23 00:00:00 +0200") %>得到1970-01-01 01:33:31 +0100
-
它对我有用,除非你在某个地方做错了(我们在我们的项目中广泛使用)。您可以在Rails控制台中或通过单元测试来测试第一个local_time方法。如果你在控制台中尝试这个,它应该在巴黎时区打印时间。只需在控制台code def local_time(d)中复制粘贴代码; Time.use_zone("巴黎")做; Time.zone.at(d.to_i);结束;结束; local_time(Time.parse("2011-07-23 00:00:00"))code。您无法像上面的评论中那样将字符串传递给local_time。你应该传递日期或日期时间对象。
-
它工作,一定是我失踪的日期时间对象。谢谢
-
很抱歉回来,但我刚刚意识到,虽然你的解决方案在自己的方面有效,但我需要一个不同的行为。您的解决方案将2011-07-23 01:00:00 +0100转换为2011-07-22 21:00:00 -0300:我需要时间在接收新时区时保持不变。所以在这个例子中像_2011-07-23 01:00:00 -0300这是类似的问题,我刚刚来到:stackoverflow.com/questions/5074238/…