1

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

但是我正在使用这些字段来根据这些字段过滤和存储(并对记录做很多其他事情),所以当我调用 created_at 和 updated_at 属性时,我会在我的时区获得时间戳,这一点很重要。

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

但是,这现在对我有用。

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

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

或者

是否有一种解决方法可以在不调用 Railsobject.created_at属性的情况下实现数据库获取和显示?

created_at 中的 Rails 和时区

Rails 时区问题

4

1 回答 1

0

我想知道为什么我什至在这个论坛上问这个问题,因为解决方法似乎很简单。但是我确实花了八个小时才到达它:)

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]
于 2012-05-08T06:29:43.677 回答