如何将 Python 中的时区转换为国家代码?
How to convert timezone to country code in Python?
我用过这个
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
如何将这些时区转换为国家代码?
你不能为所欲为。或者,你可以,但你会得到你正在得到的结果,而不是你想要的结果。简而言之,如果您查询 "the country that uses Zulu",但没有国家/地区使用祖鲁语,您将无法找到任何内容。更详细…
正如 Country Information 上的文档所说:
A mechanism is provided to access the timezones commonly in use for a particular country, looked up using the ISO 3166 country code.
但是,"deprecated" 区域如 America/Buenos_Aires
和 "historical" 区域如 US/Pacific
未在任何特定国家/地区使用。其中许多 do 恰好是 are 在某些国家/地区使用的时区的别名,例如 America/Argentina/Buenos_Aires
和 America/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 个国家使用该时区,那就是您要的得到。
我用过这个
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
如何将这些时区转换为国家代码?
你不能为所欲为。或者,你可以,但你会得到你正在得到的结果,而不是你想要的结果。简而言之,如果您查询 "the country that uses Zulu",但没有国家/地区使用祖鲁语,您将无法找到任何内容。更详细…
正如 Country Information 上的文档所说:
A mechanism is provided to access the timezones commonly in use for a particular country, looked up using the ISO 3166 country code.
但是,"deprecated" 区域如 America/Buenos_Aires
和 "historical" 区域如 US/Pacific
未在任何特定国家/地区使用。其中许多 do 恰好是 are 在某些国家/地区使用的时区的别名,例如 America/Argentina/Buenos_Aires
和 America/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 个国家使用该时区,那就是您要的得到。