Как преобразовать часовой пояс в код страны в Python?
Я использовал это
from pytz import country_timezones
Но это не включает в себя ниже часовых поясов
Африка / Асмера, Африка / Тимбукту, Америка / Аргентина /ComodRivadavia, Америка / Атка, Америка / Буэнос-Айрес, Америка / Катамарка, Америка / Корал-Харбор, Америка / Кордова, Америка / Энсенада, Америка / Форт-Уэйн, Америка / Индианаполис, Америка / Жужуй, Америка / Нокс_ИН, Америка / Луисвилл, Америка / Мендоса, Америка / Монреаль, Америка / Порту-Акре, Америка / Росарио, Америка / Кораблекрушение, Америка / Дева, Антарктида / Южный_Поль, Азия / Ашхабад, Азия / Калькутта, Азия / Чунцин, Азия / Чунгкинг, Азия / Дакка, Азия / Харбин, Азия / Стамбул, Азия / Кашгар, Азия / Катманду, Азия / Макао, Азия / Сайгон, Азия / Тель-Авив, Азия / Тимбу, Азия / Уджунг_Панданг, Азия / Улан-Батор, Атлантика / Фарерские острова, Atlantic/Jan_Mayen, Австралия / ACT, Австралия / Канберра, Австралия /LHI, Австралия /NSW, Австралия / Север, Австралия / Квинсленд, Австралия / Юг, Австралия / Тасмания, Австралия / Виктория, Австралия / Запад, Австралия /Yancowinna, Бразилия / Акко, Бразилия / ДеНоронья, Бразилия / Восток, Бразилия / Запад, CET, CST6CDT, Канада / Атлантика, Канада / Центральный, Канада / Восточный Саскачеван, Канада / Восток крачка, канада / гора, канада / ньюфаундленд, канада / тихоокеанский регион, канада / саскачеван, канада / юкон, чили / континентальный, чили / пасхальный остров, куба, EET, EST, EST5EDT, египет, эйре, европа / белфаст, европа / никосия, Европа / Тирасполь, GB, GB-Eire, Гринвич, HST, Гонконг, Исландия, Иран, Израиль, Ямайка, Япония, Кваджалейн, Ливия, MET, MST, MST7MDT, Мексика /BajaNorte, Мексика /BajaSur, Мексика /General, NZ, NZ-CHAT, Навахо, КНР, PST8PDT, Pacific/Ponape, Pacific/Samoa, Pacific/Truk, Pacific/Yap, Польша, Португалия, ROC, ROK, Сингапур, Турция, UCT, США / Аляска, США / Aleutian, США / Аризона, США / Центральная, США / Восточная Индиана, США / Восточная, США / Гавайи, США / Индиана-Старке, США / Мичиган, США / Горные, США / Тихоокеанский, США / Самоа, UTC, Универсальный, W-SU, Мокрый, Зулу
Как я могу преобразовать эти часовые пояса в код страны?
1 ответ
Вы не можете делать то, что вы хотите. Или, вы можете, но вы получите результаты, которые вы получаете, а не результаты, которые вы хотите. Вкратце, если вы спросите "страну, которая использует зулу", и ни одна страна не использует зулу, вы не сможете ничего найти. Более подробно…
Как сказано в документах по информации о стране:
Предусмотрен механизм для доступа к часовым поясам, обычно используемым в конкретной стране, поиск которых осуществляется с использованием кода страны ISO 3166.
Тем не менее, "устаревшие" зоны, такие как America/Buenos_Aires
и "исторические" зоны, такие какUS/Pacific
не используются ни в одной конкретной стране. Многие из них являются псевдонимами часовых поясов, которые используются в некоторых странах, например America/Argentina/Buenos_Aires
а также America/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 страны, которые используют этот часовой пояс, это то, что вы собираетесь получить.