gpt4 book ai didi

ruby-on-rails - Rails 3.0.20 应用程序上的 Ruby 升级(从 1.8.7 开始)导致时区异常

转载 作者:数据小太阳 更新时间:2023-10-29 08:08:43 24 4
gpt4 key购买 nike

我正在升级一个大的、旧的、笨重的 Rails 应用程序的 Ruby(主要是为了我不必在我重新格式化的笔记本电脑上重新安装 REE)并且我被时区问题严重困扰。基本上,从数据库中提取日期时间并不能正确地将它们转换为本地时间:

新系统 - Ruby 2.1.2、Ubuntu 14.04

>> Time.zone.name
=> "Central Time (US & Canada)"
>> ActiveRecord::Base.time_zone_aware_attributes
=> true
>> ActiveRecord::Base.default_timezone
=> :utc
>> Transaction.last.created_at
=> 2014-07-15 02:09:02 UTC
>> Transaction.last.created_at_before_type_cast
=> 2014-07-15 02:09:02 UTC
>> Transaction.last.created_at.localtime
=> 2014-07-14 21:09:02 -0500
>> exit
$ date
Mon Jul 14 22:27:50 CDT 2014

旧系统 - REE、Ubuntu 12.04

>> Transaction.last.created_at
=> Mon, 14 Jul 2014 22:03:11 CDT -05:00
>> Transaction.last.created_at_before_type_cast
=> Tue Jul 15 03:03:11 UTC 2014
>> Transaction.last.created_at.localtime
=> Mon Jul 14 22:03:11 -0500 2014

如您所见,我已确保 time_zone_aware_attributes 已设置,区域已设置(我在 environment.rb 中设置),并且 ActiveRecord 正在存储UTC 时间(如预期)。我对此很困惑。有人有什么想法吗?

更新

  before :all do
@current_tz = Time.zone
Time.zone = 'Pacific Time (US & Canada)'
end

after :all do
Time.zone = @current_tz
end

it 'should report time as Pacific time' do
shift = FactoryGirl.create(:shift)
new_obj = Transaction.create(shift: shift, time: DateTime.new(2013, 3, 31, 0, 0, 0, 0), amount: 0)
new_obj.reload
I18n.localize(new_obj.time, format: :timeonly).should_not == '12:00 am' #We created it with a UTC date, but it should get I18n'd to Pacific time
end

#en.yml
time:
formats:
timeonly: "%l:%M %p"

上面的测试失败了。 I18n 的东西似乎完全坏了。

更新 2

我似乎已将问题隔离到 1.9.3 -> 2.1。我想使用 1.9.3 很好,而且我想我会在新服务器上运行它,直到我升级 Rails。伤心。我仍然很乐意听到有关修复的任何建议。

最佳答案

尝试使用 I18n 助手来格式化/偏移您的时间输出 - 并强制使用时区(如果需要)

puts I18n.localize(Transaction.last.created_at, format: :long)

或者

Time.use_zone("Central Time (US & Canada)") do
puts I18n.localize(Transaction.last.created_at, format: :long)
end

我建议您也将默认的 Time.zone 设置为 UTC,并根据需要为每个用户明确更新它 - 这篇博文可能会有帮助:http://jessehouse.com/blog/2013/11/15/working-with-timezones-and-ruby-on-rails/

关于ruby-on-rails - Rails 3.0.20 应用程序上的 Ruby 升级(从 1.8.7 开始)导致时区异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24759900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com