Смещение UTC неверно при использовании tz_localize и ZoneInfo ⇐ Python
Смещение UTC неверно при использовании tz_localize и ZoneInfo
У меня есть объект pd.DatetimeIndex по местному времени без смещений UTC. Сейчас я пытаюсь локализовать этот объект, используя tz_localize и объект ZoneInfo, чтобы он содержал информацию о смещении UTC, т.е. Turn '2023-10-29 02:00 :00' в '2023-10-29 02:00:00+02:00' для определенного часового пояса (например, «Европа/Амстердам»).
Для целей репликации приведенный ниже код создает объект, с которым я работаю.
pd_local_no_tz = pd.date_range('2023-10-29', '2023-10-30', freq='H', tz=ZoneInfo('Europe/Amsterdam')).tz_localize(None) Выход[17]: DatetimeIndex(['2023-10-29 00:00:00', '2023-10-29 01:00:00', '2023-10-29 02:00:00', '2023-10-29 02:00:00', '2023-10-29 03:00:00', '2023-10-29 04:00:00', '2023-10-29 05:00:00', '2023-10-29 06:00:00', '2023-10-29 07:00:00', '2023-10-29 08:00:00', '2023-10-29 09:00:00', '2023-10-29 10:00:00', '2023-10-29 11:00:00', '2023-10-29 12:00:00', '2023-10-29 13:00:00', '2023-10-29 14:00:00', '2023-10-29 15:00:00', '2023-10-29 16:00:00', '2023-10-29 17:00:00', '2023-10-29 18:00:00', '2023-10-29 19:00:00', '2023-10-29 20:00:00', '2023-10-29 21:00:00', '2023-10-29 22:00:00', '2023-10-29 23:00:00', '2023-10-30 00:00:00'], dtype='datetime64[ns]', freq=None) Исходный объект pd.DatetimeIndex уже содержит правильные изменения часов, причем дважды появляется «2023-10-29 02:00:00» (без смещения UTC).
Сейчас я пытаюсь локализовать DatetimeIndex следующим образом, используя ZoneInfo:
pd_local = pd_local_no_tz.tz_localize(ZoneInfo('Европа/Амстердам'), ambiguous='infer') Однако результирующий pd.DatetimeIndex теперь содержит дважды запись '2023-10-29 02:00:00+02:00', хотя вторая должна иметь другое смещение UTC, а именно '2023-10-29 02:00:00+01:00':
Выход[21]: DatetimeIndex(['2023-10-29 00:00:00+02:00', '2023-10-29 01:00:00+02:00', '2023-10-29 02:00:00+02:00', '2023-10-29 02:00:00+02:00', '2023-10-29 03:00:00+01:00', '2023-10-29 04:00:00+01:00', '2023-10-29 05:00:00+01:00', '2023-10-29 06:00:00+01:00', '2023-10-29 07:00:00+01:00', '2023-10-29 08:00:00+01:00', '2023-10-29 09:00:00+01:00', '2023-10-29 10:00:00+01:00', '2023-10-29 11:00:00+01:00', '2023-10-29 12:00:00+01:00', '2023-10-29 13:00:00+01:00', '2023-10-29 14:00:00+01:00', '2023-10-29 15:00:00+01:00', '2023-10-29 16:00:00+01:00', '2023-10-29 17:00:00+01:00', '2023-10-29 18:00:00+01:00', '2023-10-29 19:00:00+01:00', '2023-10-29 20:00:00+01:00', '2023-10-29 21:00:00+01:00', '2023-10-29 22:00:00+01:00', '2023-10-29 23:00:00+01:00', '2023-10-30 00:00:00+01:00'], dtype='datetime64[ns, Europe/Amsterdam]', freq=None) Если сделать то же самое без использования ZoneInfo, смещение UTC будет правильным:
pd_local = pd_local_no_tz.tz_localize('Европа/Амстердам', ambiguous='infer') Выход[23]: DatetimeIndex(['2023-10-29 00:00:00+02:00', '2023-10-29 01:00:00+02:00', '2023-10-29 02:00:00+02:00', '2023-10-29 02:00:00+01:00', '2023-10-29 03:00:00+01:00', '2023-10-29 04:00:00+01:00', '2023-10-29 05:00:00+01:00', '2023-10-29 06:00:00+01:00', '2023-10-29 07:00:00+01:00', '2023-10-29 08:00:00+01:00', '2023-10-29 09:00:00+01:00', '2023-10-29 10:00:00+01:00', '2023-10-29 11:00:00+01:00', '2023-10-29 12:00:00+01:00', '2023-10-29 13:00:00+01:00', '2023-10-29 14:00:00+01:00', '2023-10-29 15:00:00+01:00', '2023-10-29 16:00:00+01:00', '2023-10-29 17:00:00+01:00', '2023-10-29 18:00:00+01:00', '2023-10-29 19:00:00+01:00', '2023-10-29 20:00:00+01:00', '2023-10-29 21:00:00+01:00', '2023-10-29 22:00:00+01:00', '2023-10-29 23:00:00+01:00', '2023-10-30 00:00:00+01:00'], dtype='datetime64[ns, Europe/Amsterdam]', freq=None) Как получить правильное смещение UTC при преобразовании объекта DatetimeIndex с помощью объекта ZoneInfo?
Я использую pandas 3.9, и для меня важно использовать ZoneInfo, потому что pytz не обрабатывает изменения часов после 2037 года. Поэтому цель состоит в том, чтобы правильно добавить информацию о смещении UTC в временные метки после 2037 года.
У меня есть объект pd.DatetimeIndex по местному времени без смещений UTC. Сейчас я пытаюсь локализовать этот объект, используя tz_localize и объект ZoneInfo, чтобы он содержал информацию о смещении UTC, т.е. Turn '2023-10-29 02:00 :00' в '2023-10-29 02:00:00+02:00' для определенного часового пояса (например, «Европа/Амстердам»).
Для целей репликации приведенный ниже код создает объект, с которым я работаю.
pd_local_no_tz = pd.date_range('2023-10-29', '2023-10-30', freq='H', tz=ZoneInfo('Europe/Amsterdam')).tz_localize(None) Выход[17]: DatetimeIndex(['2023-10-29 00:00:00', '2023-10-29 01:00:00', '2023-10-29 02:00:00', '2023-10-29 02:00:00', '2023-10-29 03:00:00', '2023-10-29 04:00:00', '2023-10-29 05:00:00', '2023-10-29 06:00:00', '2023-10-29 07:00:00', '2023-10-29 08:00:00', '2023-10-29 09:00:00', '2023-10-29 10:00:00', '2023-10-29 11:00:00', '2023-10-29 12:00:00', '2023-10-29 13:00:00', '2023-10-29 14:00:00', '2023-10-29 15:00:00', '2023-10-29 16:00:00', '2023-10-29 17:00:00', '2023-10-29 18:00:00', '2023-10-29 19:00:00', '2023-10-29 20:00:00', '2023-10-29 21:00:00', '2023-10-29 22:00:00', '2023-10-29 23:00:00', '2023-10-30 00:00:00'], dtype='datetime64[ns]', freq=None) Исходный объект pd.DatetimeIndex уже содержит правильные изменения часов, причем дважды появляется «2023-10-29 02:00:00» (без смещения UTC).
Сейчас я пытаюсь локализовать DatetimeIndex следующим образом, используя ZoneInfo:
pd_local = pd_local_no_tz.tz_localize(ZoneInfo('Европа/Амстердам'), ambiguous='infer') Однако результирующий pd.DatetimeIndex теперь содержит дважды запись '2023-10-29 02:00:00+02:00', хотя вторая должна иметь другое смещение UTC, а именно '2023-10-29 02:00:00+01:00':
Выход[21]: DatetimeIndex(['2023-10-29 00:00:00+02:00', '2023-10-29 01:00:00+02:00', '2023-10-29 02:00:00+02:00', '2023-10-29 02:00:00+02:00', '2023-10-29 03:00:00+01:00', '2023-10-29 04:00:00+01:00', '2023-10-29 05:00:00+01:00', '2023-10-29 06:00:00+01:00', '2023-10-29 07:00:00+01:00', '2023-10-29 08:00:00+01:00', '2023-10-29 09:00:00+01:00', '2023-10-29 10:00:00+01:00', '2023-10-29 11:00:00+01:00', '2023-10-29 12:00:00+01:00', '2023-10-29 13:00:00+01:00', '2023-10-29 14:00:00+01:00', '2023-10-29 15:00:00+01:00', '2023-10-29 16:00:00+01:00', '2023-10-29 17:00:00+01:00', '2023-10-29 18:00:00+01:00', '2023-10-29 19:00:00+01:00', '2023-10-29 20:00:00+01:00', '2023-10-29 21:00:00+01:00', '2023-10-29 22:00:00+01:00', '2023-10-29 23:00:00+01:00', '2023-10-30 00:00:00+01:00'], dtype='datetime64[ns, Europe/Amsterdam]', freq=None) Если сделать то же самое без использования ZoneInfo, смещение UTC будет правильным:
pd_local = pd_local_no_tz.tz_localize('Европа/Амстердам', ambiguous='infer') Выход[23]: DatetimeIndex(['2023-10-29 00:00:00+02:00', '2023-10-29 01:00:00+02:00', '2023-10-29 02:00:00+02:00', '2023-10-29 02:00:00+01:00', '2023-10-29 03:00:00+01:00', '2023-10-29 04:00:00+01:00', '2023-10-29 05:00:00+01:00', '2023-10-29 06:00:00+01:00', '2023-10-29 07:00:00+01:00', '2023-10-29 08:00:00+01:00', '2023-10-29 09:00:00+01:00', '2023-10-29 10:00:00+01:00', '2023-10-29 11:00:00+01:00', '2023-10-29 12:00:00+01:00', '2023-10-29 13:00:00+01:00', '2023-10-29 14:00:00+01:00', '2023-10-29 15:00:00+01:00', '2023-10-29 16:00:00+01:00', '2023-10-29 17:00:00+01:00', '2023-10-29 18:00:00+01:00', '2023-10-29 19:00:00+01:00', '2023-10-29 20:00:00+01:00', '2023-10-29 21:00:00+01:00', '2023-10-29 22:00:00+01:00', '2023-10-29 23:00:00+01:00', '2023-10-30 00:00:00+01:00'], dtype='datetime64[ns, Europe/Amsterdam]', freq=None) Как получить правильное смещение UTC при преобразовании объекта DatetimeIndex с помощью объекта ZoneInfo?
Я использую pandas 3.9, и для меня важно использовать ZoneInfo, потому что pytz не обрабатывает изменения часов после 2037 года. Поэтому цель состоит в том, чтобы правильно добавить информацию о смещении UTC в временные метки после 2037 года.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение