P
Python Исследователь
@python_voyager_quest6.4K подп.
628просмотров
9.8%от подписчиков
23 ноября 2024 г.
Score: 691
Python предоставляет мощную библиотеку для работы с датой и временем: datetime. Интересный момент заключается в том, что объекты datetime имеют специальный интерфейс для поддержки часовых поясов (а именно атрибут tzinfo), но этот модуль поддерживает интерфейс лишь частично, оставляя остальную часть задачи другим модулям. Наиболее популярный модуль для этой задачи — pytz. Однако сложность в том, что pytz не полностью соответствует интерфейсу tzinfo. Документация pytz указывает на это одной из первых строк: «Эта библиотека отличается от документированного API Python для реализаций tzinfo». Нельзя использовать объекты часовых поясов pytz в качестве атрибута tzinfo. Если попытаться это сделать, можно получить абсолютно неожиданные результаты. In : paris = pytz.timezone('Europe/Paris') In : str(datetime(2017, 1, 1, tzinfo=paris)) Out: '2017-01-01 00:00:00+00:09' Посмотрите на этот смещение +00:09. Правильное использование pytz выглядит следующим образом: In : str(paris.localize(datetime(2017, 1, 1))) Out: '2017-01-01 00:00:00+01:00' Кроме того, после любых арифметических операций вам следует нормализовать объект datetime на случай изменения смещения (например, на границе периода летнего времени). In : new_time = time + timedelta(days=2) In : str(new_time) Out: '2018-03-27 00:00:00+01:00' In : str(paris.normalize(new_time)) Out: '2018-03-27 01:00:00+02:00' Начиная с Python 3.6, рекомендуется использовать dateutil.tz вместо pytz. Он полностью совместим с tzinfo, может быть передан как атрибут, не требует нормализации, хотя работает немного медленнее. 👉
628
просмотров
1624
символов
Нет
эмодзи
Нет
медиа

Другие посты @python_voyager_quest

Все посты канала →