ActiveSupport TimeZone 未返回所有区域
ActiveSupport TimeZone not returning all zones
我遇到了类似 this 的问题。并非所有区域都 returning with:
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)
有错误return?如何让第一个例子显示所有区域?
编辑。
我正在使用 GraphQL-ruby。我已经为 return 时区列表创建了一个枚举:
# 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
然后里面query_type.rb
[..]
field :time_zones, Types::TimeZoneEnumType, null: false
[..]
接下来,在 graphiql 中,我进行查询:
query timeZones{
__type(name: "TimeZoneEnum") {
enumValues {
name
description
}
}
}
其中 return 类似,除了伦敦:
[
[..]
{
"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
之后我应该看到“伦敦”,但它不在那里。
如果我运行
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
.
的结果来进行测试
我遇到了类似 this 的问题。并非所有区域都 returning with:
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)
有错误return?如何让第一个例子显示所有区域?
编辑。
我正在使用 GraphQL-ruby。我已经为 return 时区列表创建了一个枚举:
# 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
然后里面query_type.rb
[..]
field :time_zones, Types::TimeZoneEnumType, null: false
[..]
接下来,在 graphiql 中,我进行查询:
query timeZones{
__type(name: "TimeZoneEnum") {
enumValues {
name
description
}
}
}
其中 return 类似,除了伦敦:
[
[..]
{
"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
之后我应该看到“伦敦”,但它不在那里。
如果我运行
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
.