Есть ли кто-нибудь, кто может помочь мне понять, что здесь происходит?Почему pytz localize() не создает объект datetime с tzinfo, соответствующий объекту tz, который его локализовал?
import pytz
from datetime import datetime
tz = pytz.timezone('Europe/Berlin')
print repr(tz)
# <DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>
dt = datetime(2011, 1, 3, 18, 40)
result = tz.localize(dt)
print repr(result.tzinfo)
# <DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>
assert result.tzinfo == tz, "Why aren't these the same timezone?"
Мое понимание было то, что localize()
метод на объекте pytz часовых поясов бы наивным объект типа DateTime, и добавить tzinfo
свойство, которое соответствует объект часового пояса, выполняющую локализации. В этом случае это, похоже, не происходит.
Ясно, что есть кое-что, что я недопонимаю о часовых поясах или о том, как pytz обрабатывает часовые пояса. Может ли кто-нибудь объяснить?
Благодарим Вас за ваш комментарий. Хороший улов на CET/CEST. Это была плохая копия с моей стороны (теперь отредактирована). Я экспериментировал как с датой перехода на летнее время, так и с летней годовщиной. Я попытался запустить это под Python 3.4 с новейшим pytz и получил тот же результат. См. Https://gist.github.com/bjmc/59d8650ae3d2aebb7584 Ваша информация о источнике данных tz оценена. Означает ли это, что атрибут 'tzinfo' в [современной] локализованной дате никогда не сравним с абстрактным объектом временной зоны от pytz? – bjmc
В общем, я бы не рассматривал 'tzinfo' когда-либо сравнимый с другим' tzinfo' без конкретной даты и времени. Однако, если вы знаете, что оба объекта принадлежат pytz (или из [tzlocal] (https://pypi.python.org/pypi/tzlocal)), вы можете сравнить их свойства '.zone', которые просто содержат строку идентификатор зоны («Европа/Берлин»). –
Не уверен, что это ответ. Он просто повторяет, что это проблема. Проблема возникает при попытке заменить tzinfo объекта datetime. –