这就是我的意思......
require 'rubygems'
gem 'activesupport','4.2.6'
require 'active_support/all'
Time.zone = 'EST'
puts "Print the current Time zone -- [#{Time.zone}]"
Thread.new do
puts "Time zone(will be nil) instead thread -- [#{Time.zone}]"
end
sleep 1
O / P
Print the current Time zone -- ((GMT-05:00) EST)
Time zone(will be nil) instead thread -- ()
显然,对于线程内的Time.zone,rails在这里做了一些魔术。
所以我的问题是......
为什么Rails正在做这个魔术?
Rails代码中的位置就是这样。(代码的链接会很棒)
答案 0 :(得分:1)
如果您查看Time.zone
,您可以看到它仅针对当前线程设置,因此这似乎是预期的行为。
您可以存储在变量中并以这种方式调用它,或者每次在创建线程时将Time.zone设置为“EST”,然后再调用Time.zone。
以下是正在发生的事情的一个例子
eval
我无法回答为什么Rails会为它所做的许多事情做出魔力,但我相信可能每个线程都可以在不同的时区上运行。
答案 1 :(得分:0)
您需要设置default_zone:
Time.zone_default = Time.find_zone! 'Eastern Time (US & Canada)'