Rails 3.1时区迷茫?

时间:2011-10-24 02:14:49

标签: ruby-on-rails ruby-on-rails-3

以下是我目前的情况:

我有一个具有属性时区的用户类。

当用户使用start_time(下午3点)和end_time(下午5点)创建Lecture时,我想确保在数据库中start_time和end_time实际上是在用户的时区中的下午3点和下午5点。

在我的应用程序控制器中,我正在执行以下操作:

def set_timezone
  if current_user
    Time.zone = current_user.time_zone or "Eastern Time (US & Canada)"
  end
end

当上述讲座保存到数据库时,它似乎增加了4个小时。是将它转换回UTC吗?奇怪的是,当我在视图中显示时间时它是正确的(我猜它是从UTC时间转换回EST时间)。

我希望如此,如果用户选择下午4点,它将在下午4点保存在数据库中。当我在视图中显示该时间时,它是下午4点。我目前做错了什么?

编辑:在将数据存储到数据库中时,rails似乎也会将所有时间转换为UTC。在我进行涉及时间的查询之前,这是可以的(我必须手动将其转换为UTC)。

1 个答案:

答案 0 :(得分:3)

MySQL also has a time zone.

值得注意的是(强调我的):

  

当前会话时区设置会影响区域敏感的时间值的显示和存储。这包括由NOW()或CURTIME()等函数显示的值,以及存储在TIMESTAMP列中和从TIMESTAMP列中检索的值。 TIMESTAMP列的值从当前时区转换为UTC以进行存储,从UTC转换为当前时区以进行检索。

是否值得做任何事情......不确定。我很怀疑。