为什么在Rails中使用Time.current而不是Time.zone.now,总是设置Time.zone?

时间:2017-08-17 19:55:25

标签: ruby-on-rails time timezone

Time.current的文档说:

  

设置Time.zone.nowTime.zone时返回config.time_zone,   否则只返回Time.now

# File activesupport/lib/active_support/core_ext/time/calculations.rb, line 36
def current
  ::Time.zone ? ::Time.zone.now : ::Time.now
end

但是什么时候Time.zone在Rails中设置了 而不是

# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
# config.time_zone = 'Berlin'

我已评论config.time_zone,我仍然认为Time.zone等于' UTC'因为它显然在评论中提到了这一点。那么,使用Time.current而不是Time.zone.now是什么意思?

PS:我在Rails 4.1.16上观察到这一点

1 个答案:

答案 0 :(得分:6)

简短的回答是,如果您按原样使用Rails,则除了更清晰/更短的语法之外没有区别。

Time.zone_default通过ActiveSupport::Railtieactive_support.initialize_time_zone初始化。有关铁路初始化过程的更多信息here

我猜这个检查的原因是,作为一个框架,它考虑了有人从他们的rails启动过程中删除了这个active_support.initialize_time_zone的情况。在这种情况下,Time.zone将为nil