Как преобразовать часовой пояс в код страны в 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 страны, которые используют этот часовой пояс, это то, что вы собираетесь получить.

Другие вопросы по тегам