轨道中的时间偏移

时间:2012-11-30 07:19:31

标签: mysql ruby-on-rails ruby

我的服务器默认时区是+0400(莫斯科)。所有实例以UTC格式记录到DB。 IE:用户在04-00创建项目,记录为00-00。当我想要

Item.last 

我看到UTC原始时间。当我问的时候

Item.last.created_at 

我得到+0400时间。但!当我使用像

这样的标准时间函数时
Item.where('created_at > ?', Time.now.beginning_of_day)

正在进行SQL查询

SELECT `items`.* FROM `items`  WHERE (items.created_at > '2012-11-30 00:00:00')

而不是

SELECT `items`.* FROM `items`  WHERE (items.created_at > '2012-11-29 20:00:00')

所以我失去了4个小时。小麻烦是使用in_time_zone:

Time.now.beginning_of_day.in_time_zone(-4)

但我不是一个绝地的方式:D有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我希望您的用户在其个人资料中有一些与其时区相关的设置。在这种情况下,您可以执行以下操作:

Time.use_zone(zone_of_current_user) do # like 'America/New_York'
  @products = Product.where('created_at > ?', Time.zone.now.beginning_of_day)
end

这样您就可以设置块的区域。

请注意使用zone的{​​{1}}方法。

答案 1 :(得分:0)

我想我已经解决了它:

Time.now.beginning_of_day.in_time_zone('UTC')
 => Thu, 29 Nov 2012 20:00:00 UTC +00:00 

所以这是关系莫斯科什么时候以UTC时区开始的那天:)