Rails时区不能按预期工作

时间:2014-03-02 07:18:39

标签: ruby-on-rails ruby-on-rails-4

这不会在太平洋时区返回时间:

Time.use_zone "Pacific Time (US & Canada)" do
  Time.now
end

这在太平洋时区有效并且返回时间:

Time.now.in_time_zone "Pacific Time (US & Canada)"

我正在使用gem Rails v4.1.0.rc1

1 个答案:

答案 0 :(得分:1)

以下应该工作

Time.use_zone "Pacific Time (US & Canada)" do
  p Time.zone.now
end

为什么呢? Time.now无效

答案很简单Time.now是Ruby的方法,Time.zone.now是Rails方法。

Time.now将为您提供服务器时间。但Time.zone.now将为您提供rails应用程序时间(在config.time_zone中设置)。当您Time.use_zone给出块和时区作为参数时,它将使用此时区作为块中的默认值。但是调用Time.now仍然会获取未更改的操作系统的时间。

来自#use_zone Rails API#now Ruby API