Разница между datetime.combine () и pytz.localize () - PullRequest
0 голосов
/ 10 октября 2018

Я немного озадачен следующим поведением.Предположим, я использую datetime.combine() для создания объекта с учетом часового пояса:

>>> date
datetime.date(2018, 10, 17)
>>> time
datetime.time(6, 0)
>>> tz
<DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>
>>> datetime.combine(date, time, tzinfo=tz)
datetime.datetime(2018, 10, 17, 6, 0, tzinfo=<DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>)

или я использую pytz.localize() для того же:

>>> tz.localize(datetime.combine(date, time))
datetime.datetime(2018, 10, 17, 6, 0, tzinfo=<DstTzInfo 'Europe/Berlin' CEST+2:00:00 DST>)

Обратите внимание, как изменились имя часового пояса и смещение tzinfo.Я не могу найти надлежащую документацию для такого поведения.Документация pytz гласит:

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

Так что именно происходитЗдесь?(Несколько связанных вопросов: здесь или здесь .)

1 Ответ

0 голосов
/ 10 октября 2018

Вы только что обнаружили (опять же), что никогда не должны напрямую добавлять информацию о часовом поясе при создании часовых поясов с учетом часового пояса.Всегда используйте tz.localize().

Проблема, с которой вы сталкиваетесь, заключается в том, что datetime.combine не корректирует объект tzinfo в соответствии с фактическим временем даты.Он по-прежнему предполагает информацию о часовом поясе первой действительной даты в этом часовом поясе, которая была в конце 1800-х годов и оказалась 0:53:00 от UTC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...