在Rails中创建时间对象时的错误时间

时间:2019-01-03 16:36:08

标签: ruby-on-rails timezone

所以我有一个Restaurant模型,其中有两个time列:

t.time "opens"
t.time "closes"

当我从管理界面(使用Rails Admin创建餐厅时,似乎考虑了正确的时间(例如12:00),但是在我的网站和管理界面中,显示的是正确的时间更多小时(13:00)。

以下是一些有趣的控制台输出:

irb(main):003:0> Restaurant.first
=> #<Restaurant id: 1, name: "Afrofoods", closes: "2000-01-01 14:00:00", opens: "2000-01-01 12:00:00", created_at: "2019-01-03 15:24:02", updated_at: "2019-01-03 15:24:02">

irb(main):004:0> Restaurant.first.opens
=> Sat, 01 Jan 2000 13:00:00 CET +01:00

irb(main):005:0> Time.now
=> 2019-01-03 16:31:54 +0000

这可能是时区问题,因为我在法国,我的服务器在英国。但是我应该如何处理呢?我是否应该通过将每个时间对象设置为少一小时来将我的餐厅保存在数据库中?还是应该尝试更改代码中的某些内容?

PS:我不在乎日期;我只是在浪费时间。

1 个答案:

答案 0 :(得分:1)

始终以UTC格式节省时间到数据库。然后,您可以在Rails应用程序中管理时区。例如,您可以在当前用户/管理员记录中添加时区列,并在应用程序控制器中添加around_action,或者仅在应用程序设置中指定时区。

    around_action :set_time_zone

    private

    def set_time_zone
      Time.use_zone(current_user.timezone) { yield }
    end

注意:如果时区与您的项目相关,最好在Time.current上使用Time.current。时间为当前的缘故为Time.zone.now