Существует ли список временных зон Pytz?
Как получить все возможные значения для аргумента timezone в библиотеке Python pytz?
Я хотел бы узнать, какие все возможные значения может принимать аргумент timezone в библиотеке Python pytz. Как это можно сделать?
5 ответ(ов)
Вы можете получить список всех доступных часовых поясов с помощью pytz.all_timezones
:
In [40]: import pytz
In [41]: pytz.all_timezones
Out[42]:
['Africa/Abidjan',
'Africa/Accra',
'Africa/Addis_Ababa',
...]
Также существует pytz.common_timezones
, который содержит только наиболее распространенные часовые пояса:
In [45]: len(pytz.common_timezones)
Out[45]: 403
In [46]: len(pytz.all_timezones)
Out[46]: 563
Таким образом, pytz.all_timezones
возвращает полный список часовых поясов, в то время как pytz.common_timezones
включает только общепринятые.
Не создавайте свой собственный список временных зон — в pytz
уже существует встроенное множество:
import pytz
set(pytz.all_timezones_set)
>>> {'Europe/Vienna', 'America/New_York', 'America/Argentina/Salta',..}
Затем вы можете применить временную зону:
import datetime
tz = pytz.timezone('Pacific/Johnston')
ct = datetime.datetime.now(tz=tz)
>>> ct.isoformat()
2017-01-13T11:29:22.601991-05:00
Или, если у вас уже есть объект datetime
, который осведомлён о временной зоне (не наивный):
# Этот временной штамп в UTC
my_ct = datetime.datetime.now(tz=pytz.UTC)
# Теперь преобразуем его в другую временную зону
new_ct = my_ct.astimezone(tz)
>>> new_ct.isoformat()
2017-01-13T11:29:22.601991-05:00
Таким образом, не тратьте время на создание своего списка временных зон, используйте то, что уже есть!
Название временной зоны — единственный надежный способ указания временной зоны.
Вы можете найти список названий временных зон по следующей ссылке: Список временных зон tz. Обратите внимание, что этот список содержит много псевдонимов, таких как US/Eastern для временной зоны, которую правильно называют America/New_York.
Если вы хотите программно создать этот список из базы данных zoneinfo, вы можете скомпилировать его из файла zone.tab в базе данных zoneinfo. Я не думаю, что pytz предлагает API для получения таких данных, и также не уверен, что это было бы очень полезно.
Доступно начиная с Python 3.9:
Модуль zoneinfo
, который появился в Python 3.9, работает с базой данных IANA.
Чтобы получить все доступные часовые пояса, сначала выполните команду:
pip install tzdata
А затем:
import zoneinfo
print(zoneinfo.available_timezones())
Этот код выведет список всех доступных часовых поясов.
Чтобы вывести список доступных часовых поясов с помощью библиотеки pytz
, вы можете использовать следующий фрагмент кода в цикле:
for tz in pytz.all_timezones:
print(tz)
Этот код выведет каждый часовой пояс на отдельной строке, например:
Africa/Douala
Africa/El_Aaiun
Africa/Freetown
Africa/Gaborone
Africa/Harare
Как уже упоминалось в предыдущих ответах, вы также можете просто напечатать весь список всех часовых поясов, используя следующую команду:
print(pytz.all_timezones)
В этом случае вы получите вывод в виде массива, который включает все часовые пояса:
['Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', ..., 'Zulu']
Это полезно, если вам нужно использовать все часовые пояса сразу, но вывод будет одним большим массивом, без разделения на строки.
Преобразование строки unix timestamp в читаемую дату
Как преобразовать datetime в date?
В чем разница между null=True и blank=True в Django?
Как получить день недели по заданной дате?
Как конвертировать секунды в часы, минуты и секунды?