配置Ruby-on-rails created_at和updated_at日期time_zone

时间:2012-05-07 06:56:26

标签: ruby-on-rails datetime timezone

Rails以UTC时间存储created_at和updated_at时间戳。

但我正在使用这些字段根据这些字段过滤和存储(并对记录执行许多其他操作),因此,当我调用created_at和updated_at属性时,我的时区中会得到时间戳。

正如以下两个SO问题所述,我可以通过在environment.rb文件中配置时区来实现。

然而,现在这对我有用。

因为我从数据库中获取记录,基于created_at字段(以UTC格式),所以自然会出现错误的记录,然后我显示它们,所以日期以UTC显示,再次,不是我想要的。

有没有办法改变rails存储日期的时区?

OR

是否有解决方法可以实现数据库获取和显示,而无需调用Rails object.created_at属性?

Rails and timezone in created_at

Rails Time zone issue

1 个答案:

答案 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]