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

3

我使用了这个

from pytz import country_timezones

但它不包括以下时区:
Africa/Asmera、Africa/Timbuktu、America/Argentina/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/Chungking、Asia/Dacca、Asia/Harbin、Asia/Istanbul、Asia/Kashgar、Asia/Katmandu、Asia/Macao、Asia/Saigon、Asia/Tel_Aviv、Asia/Thimbu、Asia/Ujung_Pandang、Asia/Ulan_Bator、Atlantic/Faeroe、Atlantic/Jan_Mayen、Australia/ACT、Australia/Canberra、Australia/LHI、Australia/NSW、Australia/North、Australia/Queensland、Australia/South、Australia/Tasmania、Australia/Victoria、Australia/West、Australia/Yancowinna、Brazil/Acre、Brazil/DeNoronha、Brazil/East、Brazil/West、CET、CST6CDT、Canada/Atlantic、Canada/Central、Canada/East-Saskatchewan、Canada/Eastern、Canada/Mountain、Canada/Newfoundland、Canada/Pacific、Canada/Saskatchewan、Canada/Yukon、Chile/Continental、Chile/EasterIsland、Cuba、EET、EST、EST5EDT、Egypt、Eire、Europe/Belfast、Europe/Nicosia、Europe/Tiraspol、GB、GB-Eire、Greenwich、HST、Hongkong、Iceland、Iran、Israel、Jamaica、Japan、Kwajalein、Libya、MET、MST、MST7MDT、Mexico/BajaNorte、Mexico/BajaSur、Mexico/General、NZ、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/Arizona、US/Central、US/East-Indiana、US/Eastern、US/Hawaii、US/Indiana-Starke、US/Michigan、US/Mountain、US/Pacific、US/Samoa、UTC、Universal、W-SU、WET、Zulu
如何将这些时区转换为国家代码?

1
许多国家可能拥有相同的时区,我认为你不能轻易地将时区转换为国家代码。 - Morb
我知道,我只是想弄清楚除了那种多区域的时区之外的东西。比如“亚洲/澳门”。 - Lion.k
@Morb 此外,如果你在俄罗斯或美国等国家,相反的情况也可能发生:一个国家有多个时区。 - namezero
真的。我猜测有一些库可以帮助你。 - Morb
2
所有这些时区都已被弃用或成为历史时区。有些被指定为指向Olson数据库中当前时区的链接,其他一些是独特的时区,不再使用,我认为有些甚至根本不在数据库中。但无论如何,它们都没有被任何国家使用,因此你所要求的是不可能的:如果没有国家使用Zulu,你就无法得到“使用Zulu的国家”。 - abarnert
已删除换行符以防止大量滚动 - ByteHamster
1个回答

2
你想做的事情是不可能实现的。或者说,你可以尝试,但你得到的结果并不是你想要的结果。简单来说,如果你询问“使用祖鲁语的国家”,而没有任何国家使用祖鲁语,那么你将找不到任何信息。更详细地说...
根据国家信息文档所述:
提供了一种机制,用于访问常用于特定国家的时区,使用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}

如果您需要进行大量此类查找,当然可以构建自己的字典以使其更快速和简单:

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,则您将获得此结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接