Time.current
的文档说:
设置
Time.zone.now
或Time.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上观察到这一点
答案 0 :(得分:6)
简短的回答是,如果您按原样使用Rails
,则除了更清晰/更短的语法之外没有区别。
Time.zone_default通过ActiveSupport::Railtie
在active_support.initialize_time_zone
初始化。有关铁路初始化过程的更多信息here。
我猜这个检查的原因是,作为一个框架,它考虑了有人从他们的rails启动过程中删除了这个active_support.initialize_time_zone
的情况。在这种情况下,Time.zone
将为nil
。