给定tzInfo TimeZone
对象,例如'America/New_York
'如何获得将时区与此标识符一起使用的关联国家/地区(国家?)?
实例方法无法链接回国家/地区:
http://www.rubydoc.info/gems/tzinfo/TZInfo/Timezone
我的问题描述:
答案 0 :(得分:2)
我不确定是否有直接方式,但您可以使用Country
class构建将区域名称映射到国家/地区名称的哈希值。
您可以遍历国家/地区(使用all
方法)并获取每个国家/地区的区域标识符(使用zone_identifiers
方法)来构建哈希。
我不经常在Ruby中编写代码,所以可能它不是最好的Ruby风格的代码,但它是这样的:
# map zones to countries
ztc = {}
TZInfo::Country.all().each do |c|
c.zone_identifiers.each do |z|
ztc[z] = [] unless ztc.has_key?(z)
ztc[z].push(c.name)
end
end
ztc
将包含区域名称作为键,并将相应国家/地区名称的数组作为值包含在内。在我的机器上,我得到了:
{"Europe/Andorra"=>["Andorra"],
"Asia/Dubai"=>["United Arab Emirates", "Oman"],
"Asia/Kabul"=>["Afghanistan"],
"America/Port_of_Spain"=>["Antigua & Barbuda", "Anguilla", "St Barthelemy", "Dominica",
"Grenada", "Guadeloupe", "St Kitts & Nevis", "St Lucia",
"St Martin (French)", "Montserrat", "Trinidad & Tobago",
"St Vincent", "Virgin Islands (UK)", "Virgin Islands (US)"],
....
只需提醒您,它只包含与国家/地区相关联的时区(格式为Region/City
的时区,如Europe/London
或America/New_York
)。因此,GMT
或Etc/GMT+1
等名称不会出现在该列表中。
答案 1 :(得分:1)
基于@ Hugo的回答,对class Timezone
的简短扩展:
module TZInfo
class Timezone
def countries
return Timezone::country_map[self.name] || []
end
@@countryMap = nil
def self.country_map
if @@countryMap.nil?
@@countryMap = {}
TZInfo::Country.all().each do |c|
c.zone_identifiers.each do |z|
@@countryMap[z] ||= []
@@countryMap[z] << c.name
end
end
end
return @@countryMap
end
end
end