Почему я получаю смещение 0:53 для часового пояса Европа / Берлин? - PullRequest
0 голосов
/ 21 мая 2018

Пример кода

from datetime import datetime, timezone
import pytz

tzstring = 'Europe/Berlin'
t1 = datetime(2016, 6, 16, 2, 0, tzinfo=pytz.timezone(tzstring))
t2 = datetime(2016, 6, 16, 2, 0, tzinfo=timezone.utc).astimezone(pytz.timezone(tzstring))

Наблюдается

print(t1): 2016-06-16 02:00:00+00:53
print(t2): 2016-06-16 04:00:00+02:00

Ожидается

print(t1): 2016-06-16 04:00:00+02:00  # does not match expectation
print(t2): 2016-06-16 04:00:00+02:00  # matches expectation

Вопрос

Может кто-нибудь объяснить мне, пожалуйста?

Другие вопросы:

1 Ответ

0 голосов
/ 21 мая 2018

Я бы не хотел сказать, что могу объяснить это так, но задокументировано, что не работает.С домашней страницы pytz :

Эта библиотека поддерживает только два способа построения локализованного времени.Первый - использовать метод localize(), предоставляемый библиотекой pytz.Это используется для локализации наивного даты-времени (дата-время без информации о часовом поясе)

(Пример)

Второй способ построения локализованного времени - преобразование существующего локализованного времени.время с использованием стандартного astimezone() метода.

(пример)

К сожалению, использование аргумента tzinfo стандартных конструкторов datetime «не работает» с pytzдля многих часовых поясов.

>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt)
'2002-10-27 12:00:00 LMT+0020'

Это безопасно для часовых поясов без перехода на летнее время, хотя, например, UTC

Я подозреваю, что представление часовых поясов в pytz простонесовместимо с тем, что использует конструктор datetime.

Вместо того, чтобы преследовать точные детали, я подозреваю, что более практично просто признать, что это не работает, и использовать предложенные альтернативы.

...