以下是我目前的情况:
我有一个具有属性时区的用户类。
当用户使用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)。
答案 0 :(得分:3)
值得注意的是(强调我的):
当前会话时区设置会影响区域敏感的时间值的显示和存储。这包括由NOW()或CURTIME()等函数显示的值,以及存储在TIMESTAMP列中和从TIMESTAMP列中检索的值。 TIMESTAMP列的值从当前时区转换为UTC以进行存储,从UTC转换为当前时区以进行检索。
是否值得做任何事情......不确定。我很怀疑。