【发布时间】:2017-10-26 23:41:55
【问题描述】:
我有一个服务,它返回不同位置的当前时间信息,它使用 3 个字母缩写格式返回时区。例如。 EST、PST、EDT 等。但是,哪个 ActiveSupport 似乎知道 EDT 变体,它似乎无法解析它。示例:
时区全名根据日期转换为EST或EDT
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_offset、utc_offset、formatted_offset返回...好吧,偏移量。 ;)
标签: ruby ruby-on-rails-4 activesupport