【问题标题】:Parsing timezone abbreviations in DST在 DST 中解析时区缩写
【发布时间】:2017-10-26 23:41:55
【问题描述】:

我有一个服务,它返回不同位置的当前时间信息,它使用 3 个字母缩写格式返回时区。例如。 ESTPSTEDT 等。但是,哪个 ActiveSupport 似乎知道 EDT 变体,它似乎无法解析它。示例:

时区全名根据日期转换为ESTEDT

Time.new(2017, 12, 1).in_time_zone('Eastern Time (US & Canada)')
=> Fri, 01 Dec 2017 00:00:00 EST -05:00
Time.new(2017, 12, 1).in_time_zone('Eastern Time (US & Canada)').zone
=> "EST"
Time.new(2017, 10, 1).in_time_zone('Eastern Time (US & Canada)')
=> Sun, 01 Oct 2017 00:00:00 EDT -04:00
Time.new(2017, 10, 1).in_time_zone('Eastern Time (US & Canada)').zone
=> "EDT"

但是,逆向无法识别DST变体缩写:

Time.new(2017, 12, 1).in_time_zone('EST').zone
=> "EST"
Time.new(2017, 12, 1).in_time_zone('EST')
=> Fri, 01 Dec 2017 00:00:00 EST -05:00
Time.new(2017, 10, 1).in_time_zone('EDT')
ArgumentError: Invalid Timezone: EDT
from /home/erich/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activesupport-4.2.10/lib/active_support/core_ext/time/zones.rb:72:in `rescue in find_zone!'

对于我的情况,全名很好(并且可能更可取),因为它可以根据日期正确识别 DST 的状态。因此,如果我可以导出长格式,我可以简单地将它用于一年中的任何一天。 rails (4) 是否提供了任何方法来提供该映射,例如:

some_method('EST')
=> "Eastern Time (US & Canada)"
some_method('EDT')
=> "Eastern Time (US & Canada)"

如果没有,我还有其他方法可以处理xDT 表单吗?

【问题讨论】:

  • 这里有些混乱 - EST 和 EDT 不是区域,它们是偏移量。 “东部时间(美国和加拿大)”是区域,我不确定如何最好地获得区域的可用 3 个字符偏移,但这就是您要寻找的。​​span>
  • 这不是一对一的映射。例如,Eastern Time (US & Canada)Indiana (East) 都有缩写 EST / EDT
  • @Anthony 我肯定是错的,但我从未见过称为“偏移量”的非数字值。如果是这样的话,Activesupport 内部的混乱就很深了。 .zone 返回例如'EST'(东部标准时间),其中gmt_offsetutc_offsetformatted_offset 返回...好吧,偏移量。 ;)

标签: ruby ruby-on-rails-4 activesupport


【解决方案1】:

有一个TimezoneParser gem 可能很方便?

【讨论】:

  • 对于只有一个提交者且在生产代码中采用率较低的 gem,我总是有点犹豫,但我会检查一下。谢谢推荐。
猜你喜欢
  • 2011-01-21
  • 2014-11-29
  • 2020-08-17
  • 2010-12-14
  • 2019-09-26
  • 1970-01-01
  • 2011-04-17
  • 2015-05-16
  • 2019-12-31
相关资源
最近更新 更多