我们正在构建一个需要在多个时区显示日期(更重要的是,计算它们)的rails应用程序.
任何人都可以指出我如何在rails 2.3(.5或.8)中使用用户时区
我见过的最具包容性的文章详细介绍了用户时区应该如何工作:http://wiki.rubyonrails.org/howtos/time-zones ...虽然目前还不清楚这是什么时候写的或是什么版本铁轨 具体而言,它指出:
"Time.zone - 实际用于显示目的的时区.可以手动设置,以基于每个请求覆盖config.time_zone."
键术语是"显示目的"和"按请求基础".
在我的机器上,这是真的.但是在生产中,两者都不是真的.设置Time.zone会持续超过请求的结束(对所有后续请求),并且还会影响AR保存到数据库的方式(基本上将任何日期视为已经在UTC中,即使它不存在),从而节省了完全不合适的值.
我们与乘客一起运行Ruby Enterprise Edition.如果这是我的问题,我们是否需要切换到JRuby或其他?
为了说明这个问题,我现在在ApplicationController中添加了以下操作:
def test
p_time = Time.now.utc
s_time = Time.utc(p_time.year, p_time.month, p_time.day, p_time.hour)
logger.error "TIME.ZONE" + Time.zone.inspect
logger.error ENV['TZ'].inspect
logger.error p_time.inspect
logger.error s_time.inspect
jl = JunkLead.create!
jl.date_at = s_time
logger.error s_time.inspect
logger.error jl.date_at.inspect
jl.save!
logger.error s_time.inspect
logger.error jl.date_at.inspect
render :nothing => true, :status => 200
end
def test2
Time.zone = 'Mountain Time (US & Canada)'
logger.error "TIME.ZONE" + Time.zone.inspect
logger.error ENV['TZ'].inspect
render :nothing => …Run Code Online (Sandbox Code Playgroud)