Ваша проблема возникает из-за путаницы в летнее время. Учтите следующее:
import pandas as pd
from datetime import datetime, timedelta
import pytz
pytz_tz = pytz.timezone('Europe/London')
datetime_1 = pytz_tz.localize(datetime(2017, 10, 29) \
+ timedelta(hours=0, minutes=0))
datetime_2 = pytz_tz.localize(datetime(2017, 10, 29) \
+ timedelta(hours=1, minutes=0))
print(datetime_1)
print(datetime_2)
> 2017-10-29 00:00:00+01:00
> 2017-10-29 01:00:00+00:00
Как видите, вы обрабатываете в два раза «один и тот же» момент времени, но с разными кодировками.
Одним из решений может быть преобразование всех времен в UTC (у которого нет dst) и преобразование времен назад только при необходимости для вывода.
Тем не менее, я думаю, что вы добавляете timedelta в неправильном месте. Рассмотрим
datetime_1 = pytz_tz.localize(datetime(2017, 10, 29)) \ # localize first
+ timedelta(hours=0) # then add the delta
datetime_2 = pytz_tz.localize(datetime(2017, 10, 29)) \ # localize first
+ timedelta(hours=1) # then add the delta
> 2017-10-29 00:00:00+01:00
> 2017-10-29 01:00:00+01:00
, который дает уникальные результаты. Проверьте семантику вашего приложения, какая версия применяется.
===== старый ответ ======
Вы должны сделать так, чтобы часовой пояс объекта datetime был известен с помощью
from datetime import datetime, timedelta
from pytz import timezone
import pytz
eastern = timezone('US/Eastern')
SelltementDate = eastern.localize(datetime(2017, 10, 29, 0, 0, 0))
См. Также документацию pytz .
.