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



我使用了这个

from pytz import country_timezones

但它不包括低于时区的

非洲/阿斯马拉,非洲/廷巴克图,美国/阿根廷/ComodRivadavia,美国/Atka,美国/Buenos_Aires,美国/Catamarca,美国/Coral_Harbour,美国/科尔多瓦,美国/Ensenda,美国/Fort_Wayne,美国/印第安纳波利斯,美国/Jujuy,美国/Knox_IN,美国/路易斯维尔,美国/门多萨,美国/蒙特利尔,美国/Porto_Acre,美国/罗萨里奥,美国/Shiprock,美国/维珍,南极/南极,亚洲/阿什哈巴德,亚洲/加尔各答,亚洲/重庆,亚洲/忠清,亚洲/达卡,亚洲/哈尔滨,亚洲/伊斯坦布尔,亚洲/喀什,亚洲/加德满都,亚洲/澳门,亚洲/西贡,亚洲/Tel_Aviv,亚洲/廷布,亚洲/乌戎班当,亚洲/乌兰巴托,大西洋/法罗,大西洋/詹马延,澳大利亚/ACT,澳大利亚/堪培拉,澳大利亚/LHI,澳大利亚/NNSW,澳大利亚/北方,澳大利亚/昆士兰,澳大利亚/南部、澳大利亚/塔斯马尼亚、澳大利亚/维多利亚、澳大利亚/西部、澳大利亚/扬科维纳、巴西/阿克里、巴西/德诺罗尼亚、巴西/东部、巴西/西部、欧洲中部、CST6CDT、加拿大/大西洋、加拿大/中部、加拿大/东萨斯喀彻温、加拿大/东部、加拿大/山区、加拿大/纽芬兰、加拿大/太平洋、加拿大/萨斯喀彻万、加拿大/育空、智利/大陆、智利/伊斯特岛、古巴、EET、EST、EST5EDT,埃及、艾尔、欧洲/贝尔法斯特、欧洲/尼科西亚、欧洲/蒂拉斯波尔、英国、英国艾尔、格林威治、HST、香港、冰岛、伊朗、以色列、牙买加、日本、夸贾林、利比亚、MET、MST、MST7MDT、墨西哥/巴哈苏尔、墨西哥/通用、新西兰、新西兰-CHAT、纳瓦霍、中华人民共和国、PST8PDT、太平洋/波纳佩、太平洋/萨摩亚、太平洋/特鲁克、太平洋/亚普、波兰、葡萄牙、中华民国、韩国、新加坡、土耳其、UCT、美国/阿拉斯加、美国/阿留申、,美国/亚利桑那州、美国/中部、美国/东印第安纳州、美国东部、美国/夏威夷、美国/印第安纳斯塔克、美国/密歇根、美国/山地、美国/太平洋、美国/萨摩亚、UTC、环球、W-SU、WET、祖鲁

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

你不能随心所欲。或者,你可以,但你会得到你正在得到的结果,而不是你想要的结果。简单地说,如果你问"使用祖鲁语的国家",而没有一个国家使用祖鲁,你将找不到任何东西。更详细地说…


正如国家信息文件所说:

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


然而,像America/Buenos_Aires这样的"弃用"区域和像US/Pacific这样的"历史"区域在任何特定国家都没有使用。其中许多确实恰好是在某些国家使用的时区的别名,分别是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个国家使用该时区,那就是你会得到的。

最新更新