首页 文章

如何在Python中将时区转换为国家/地区代码?

提问于
浏览
2

我用过这个

from pytz import country_timezones

但它不包括以下时区

非洲/阿斯马拉,非洲/廷巴克图,美国/阿根廷/ ComodRivadavia,America / Atka,America / Buenos_Aires,America / Catamarca,America / Coral_Harbour,America / Cordoba,America / Ensenada,America / Fort_Wayne,America / Indianapolis,America / Jujuy ,America / Knox_IN,America / Louisville,America / Mendoza,America / Montreal,America / Porto_Acre,America / Rosario,America / Shiprock,America / Virgin,Antarctica / South_Pole,Asia / Ashkhabad,Asia / Calcutta,Asia / Chongqing,Asia /重庆,亚洲/达卡,亚洲/哈尔滨,亚洲/伊斯坦布尔,亚洲/喀什,亚洲/加德满都,亚洲/澳门,亚洲/西贡,亚洲/ Tel_Aviv,亚洲/ Thimbu,亚洲/ Ujung_Pandang,亚洲/乌兰巴托,大西洋/法罗,Atlantic / Jan_Mayen,澳大利亚/ ACT,澳大利亚/堪培拉,澳大利亚/ LHI,澳大利亚/新南威尔士州,澳大利亚/北部,澳大利亚/昆士兰州,澳大利亚/南部,澳大利亚/塔斯马尼亚州,澳大利亚/维多利亚州,澳大利亚/西部,澳大利亚/ Yancowinna,巴西/ Acre,Brazil / DeNoronha,Brazil / East,Brazil / West,CET,CST6CDT,Canada / Atlantic,Canada / Central,Canada / East-Saskatchewan,Canada / E astern,Canada / Mountain,加拿大/纽芬兰,加拿大/太平洋,加拿大/萨斯喀彻温省,加拿大/育空,智利/大陆,智利/ EasterIsland,古巴,EET,EST,EST5EDT,埃及,Eire,欧洲/贝尔法斯特,欧洲/尼科西亚,欧洲/ Tiraspol,GB,GB-Eire,格林威治,HST,香港,冰岛,伊朗,以色列,牙买加,日本,Kwajalein,利比亚,MET,MST,MST7MDT,墨西哥/ BajaNorte,墨西哥/ BajaSur,墨西哥/综合,新西兰, NZ-CHAT,Navajo,PRC,PST8PDT,Pacific / Ponape,Pacific / Samoa,Pacific / Truk,Pacific / Yap,Poland,Portugal,ROC,ROK,Singapore,Turkey,UCT,US / Alaska,US / Aleutian,US /亚利桑那州,美国/中部,美国/东印第安纳州,美国/东部,美国/夏威夷,美国/印第安纳州 - 斯塔克,美国/密歇根州,美国/山区,美国/太平洋,美国/萨摩亚,UTC,环球,W-SU, W,祖鲁

如何将这些时区转换为国家/地区代码?

1 回答

  • 2

    你无法做你想做的事 . 或者,你可以,但你会得到你得到的结果,而不是你想要的结果 . 简而言之,如果你要求“使用祖鲁族的国家”,并且没有国家使用祖鲁语,你将无法找到任何东西 . 更详细......


    正如Country Information上的文档所说:

    提供了一种机制,用于访问通常用于特定国家/地区的时区,使用ISO 3166国家/地区代码查找 .


    但是, America/Buenos_Aires 和"historical"区域(如 US/Pacific )等"deprecated"区域未在任何特定国家/地区使用 . 其中许多确实恰好是某些国家/地区正在使用的时区的别名,例如 America/Argentina/Buenos_AiresAmerica/Los_Angeles ,但这对您没有任何好处,因为 pytz 不会公开该信息 . 您可以针对 pytz 提交增强请求,以便在将来的版本中添加该请求,如果您认为这很重要的话 .


    无论如何,这是你如何识别使用给定时区的国家,如下所示:

    {country for country, timezones in country_timezones.items()
     if timezone in timezones}
    

    如果你需要做很多这些查找,你当然可以构建自己的dict,使其更快更简单:

    timezone_countries = {}
    for country, timezones in country_timezones.items():
        for timezone in timezones:
            timezone_countries.setdefault(timezone, set()).add(country)
    

    现在它只是:

    timezone_countries[timezone]
    

    但无论哪种方式,你可能会得到一个空集,或一组3个国家,而不是1.如果数据库实际上说有0或3个国家使用该时区,那就是你将得到的 .

相关问题