当我将 7.0.8.6 与 ruby 3.2.2 一起使用时,
US/Eastern
工作正常,现在我在执行时遇到错误:
irb(main):001:0> Time.now.in_time_zone('US/Eastern')
/home/fernando/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/activesupport-7.0.8.6/lib/active_support/core_ext/time/zones.rb:84:in ‘find_zone!’:无效时区:美国/东部(ArgumentError) old_raise.call(*args, **kwargs)
当我升级到 Rails 7.2.2.1 和 ruby 3.3.6 时出现该错误。 当我恢复到 7.0.8.6 时,我做了
bundle install --redownload
,但错误仍然存在。
这里发生了什么?
我尝试播放你的错误,但不幸的是发现了所有区域,并且行为有点奇怪:
irb(main):025> ActiveSupport::TimeZone['US/Eastern']
=>
#<ActiveSupport::TimeZone:0x000000012593dd68
@name="US/Eastern",
@tzinfo=#<TZInfo::DataTimezone: US/Eastern>,
@utc_offset=nil>
irb(main):026> ActiveSupport::TimeZone.all.select { |n| n.name == "US/Eastern" }
=> []
顺便说一下,您可以使用“America/New_York”,“US/Eastern”时区是 America/New_York 的别名。您可以在代码中将 US/Eastern 的所有实例替换为 America/New_York。
irb(main):028> Time.now.in_time_zone('America/New_York')
=> Sat, 04 Jan 2025 09:05:14.723409000 EST -05:00
irb(main):029> Time.now.in_time_zone('US/Eastern')
=> Sat, 04 Jan 2025 09:05:29.728619000 EST -05:00