首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从tzInfo TimeZone来的国家?

从tzInfo TimeZone来的国家?
EN

Stack Overflow用户
提问于 2017-08-08 12:32:29
回答 2查看 967关注 0票数 2

给定一个tzInfo TimeZone对象(如'America/New_York),‘我如何才能得到相关的国家(国家?)是否会使用带有此标识符的时区?

实例方法不链接回国家:

http://www.rubydoc.info/gems/tzinfo/TZInfo/Timezone

我的问题描述:

  • 我收到在特定时区生成的带有长区域标识符的科学数据集(幸运的是!)。这些数据集没有在打开地理定位的情况下存储,因此时区是生成数据的第一个标识符。
  • 把时区变成友好的标识符是理解其起源的第一步,但许多地区的名称是非常深奥的(美国/梅诺米尼?),所以从时区到支持时区的国家名单进行反向查找是很好的。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-08 13:27:48

我不确定是否有直接的方法,但您可以使用 class构建一个哈希,将区域名称映射到国家名。

您可以循环遍历各个国家(使用all方法),并获取每个国家的区域标识符(使用zone_identifiers方法)来构建哈希。

我不经常用Ruby编写代码,所以它可能不是最好的Ruby风格的代码,但是它是这样的:

代码语言:javascript
复制
# 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将包含区域名称作为键,以及相应国家名称的数组作为值。在我的机器里,我有:

代码语言:javascript
复制
{"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/LondonAmerica/New_York)。因此,像GMTEtc/GMT+1这样的名字不会出现在这个列表中。

票数 3
EN

Stack Overflow用户

发布于 2017-08-08 21:01:20

基于@Hugo的回答,class Timezone的一个简短扩展

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45568483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档