我不确定是否有直接的方法,但可以使用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
将不在该列表中。
什么是你想利用这些信息做什么?我可以想象一个时区ID在多个国家之间共享的情况。 (我不知道目前情况是否确实如此,但例如,如果一个国家分裂成两个国家,至少可能会持续一段时间)。 –
仅供参考。大家都知道New_York在哪里,但是America/Bahia_Banderas? –
https://github.com/eggert/tz/blob/master/zone.tab –