Rails以UTC时间存储created_at和updated_at时间戳。
但我正在使用这些字段根据这些字段过滤和存储(并对记录执行许多其他操作),因此,当我调用created_at和updated_at属性时,我的时区中会得到时间戳。
正如以下两个SO问题所述,我可以通过在environment.rb文件中配置时区来实现。
然而,现在这对我有用。
因为我从数据库中获取记录,基于created_at
字段(以UTC格式),所以自然会出现错误的记录,然后我显示它们,所以日期以UTC显示,再次,不是我想要的。
有没有办法改变rails存储日期的时区?
OR
是否有解决方法可以实现数据库获取和显示,而无需调用Rails object.created_at
属性?
答案 0 :(得分:0)
我想知道为什么我甚至在这个论坛上提出这个问题,因为解决方法似乎非常简单。但它确实需要8个小时才能达到它:)
1)从数据库中提取记录并显示它们时,我可以简单地进行
select CONVERT_TZ(date) as date from table;
而不是
select date from table;
CONVERT_TZ()
是一个mysql
特定功能,所以它对我有用。虽然不是通用的解决方案。
2)其次,当我必须从任何其他时区给出的日期范围中获取记录时,我可以做两件事之一。
一个 - 我可以将[user-entered-date] 00:00:00
替换为[user-entered-date] 07:00:00
作为日期范围的起点,[user-entered-date] 59:59:59
替换为[user-entered-date + 1.day] 07:00:00
作为范围的终点。请注意,这将要求我使用DateTime对象而不是使用Date对象。
两个 - 在where
条款中,我可以做到
CONVERT_TZ(registrations.created_at) <= [user/entered/date]
而不是
(registrations.created_at) <= [user/entered/date]