ActiveSupport TimeZone不返回所有时区



我有一个这样的问题。并非所有区域都返回:

ActiveSupport::TimeZone.all.sort_by {|t| t.name}.map { |tz|
#symbol = tz.tzinfo.identifier.gsub(/[^_a-zA-Z0-9]/, '_').squeeze('_').upcase!

tz.to_s #> (GMT+00:00) Edinburgh for example
}

我需要使用.to_s来获得UTC(GMT+00:00)。综上所述,London缺失,我假设其他。这个很好:

ActiveSupport::TimeZone::MAPPING.sort_by {|k,v| k}.map { |k,v|
#symbol = k.gsub(/[^_a-zA-Z0-9]/, '_').squeeze('_').upcase!

k #> London London is included with this method
}

我不能使用这种方法,因为我不知道如何获得(GMT+00:00) London中的(GMT+00:00)

bug回来了吗?如何显示第一个示例中的所有区域?

编辑。

我使用GraphQL-ruby。我已经创建了一个enum来返回时区列表:

# Taken from: https://gist.github.com/pedrocarmona/f41d25e631c1144045971c319f1c9e17
class Types::TimeZoneEnumType < Types::BaseEnum
ActiveSupport::TimeZone.all.sort_by {|t| t.name}.map { |tz|
symbol = tz.tzinfo.identifier.gsub(/[^_a-zA-Z0-9]/, '_').squeeze('_').upcase
value("TZ_#{symbol}", tz.to_s)
}
end

Then insidequery_type.rb

[..]
field :time_zones, Types::TimeZoneEnumType, null: false
[..]

接下来,在graphhiql中,我进行查询:

query timeZones{
__type(name: "TimeZoneEnum") {
enumValues {
name
description
}
}
}

返回类似的内容,除了伦敦:

[
[..]
{
"name": "TZ_AMERICA_LA_PAZ",
"description": "(GMT-04:00) La Paz"
},
{
"name": "TZ_AMERICA_LIMA",
"description": "(GMT-05:00) Lima"
},
{
"name": "TZ_EUROPE_LISBON",
"description": "(GMT+00:00) Lisbon"
},
{
"name": "TZ_EUROPE_LJUBLJANA",
"description": "(GMT+01:00) Ljubljana"
},
{
"name": "TZ_EUROPE_MADRID",
"description": "(GMT+01:00) Madrid"
},

[..]
]

Ljubljana之后我应该看到"London"但是它不在那里。

如果我运行

ActiveSupport::TimeZone.all.sort_by {|t| t.name}.map { |tz| 
[ tz.tzinfo.identifier.gsub(/[^_a-zA-Z0-9]/, '_').squeeze('_').upcase, tz.to_s ] 
}.sort

结果包括["EUROPE_LONDON", "(GMT+00:00) Edinburgh"], ["EUROPE_LONDON", "(GMT+00:00) London"]项,即EUROPE_LONDON是重复的。

我不知道GraphQL库是如何操作的,但我假设它正在删除数据并返回EUROPE_LONDON的单个条目(枚举通常是唯一的)。莫斯科也是一样,它有莫斯科和圣彼得堡的值,所以你可以通过查看EUROPE_MOSCOW的结果来测试。

相关内容

  • 没有找到相关文章

最新更新