Python Converte l'ora legale in ora della zona standard

Sep 30 2020

Ho dati provenienti dal campo (Florida), che li salva nell'ora locale. La Florida ha tempo per risparmiare la luce del giorno. Quindi, voglio convertirlo nella zona EST. Come lo faccio? Il mio codice:

local_df.index = DatetimeIndex(['2019-06-01 06:58:45', '2019-10-01 06:59:00',
               '2019-10-01 06:59:15', 
               '2020-07-18 09:16:30', '2020-07-18 09:16:45'],
              dtype='datetime64[ns]', name='', freq=None)
est_df.index = local_df.index.tz_localize(tz='EST')
est_df.index = DatetimeIndex(['2019-06-01 06:58:45-05:00', '2019-10-01 06:59:00-05:00',
               '2019-10-01 06:59:15-05:00','2020-07-18 09:16:30-05:00', '2020-07-18 09:16:45-05:00'],
              dtype='datetime64[ns]', name='', freq=None)

Il mio codice sopra in realtà non converte l'ora locale nell'ora standard orientale, aggiunge solo la differenza di fuso orario con UCT. Questo non è corretto.

Risposte

1 MrFuppes Oct 01 2020 at 06:45

Tieni presente che ESTnon è un fuso orario ma un offset dall'UTC di determinati fusi orari in un determinato periodo dell'anno. Suggerisco di utilizzare i nomi dei fusi orari IANA invece per un'attribuzione geografica univoca. Nota a margine: la Florida ha due fusi orari; US / Eastern e US / Central.

Inoltre, per convertire l' ora UTC nell'ora di un fuso orario, dovrai prima localizzare in UTC. Il tuo codice potrebbe avere un aspetto simile

import pandas as pd

dti = pd.DatetimeIndex(['2019-06-01 06:58:45', '2019-10-01 06:59:00', '2019-10-01 06:59:15', 
                        '2020-07-18 09:16:30', '2020-07-18 09:16:45'])

dti_UTC = dti.tz_localize('UTC')
dti_USEastern = dti_UTC.tz_convert('US/Eastern')

# dti_USEastern
# DatetimeIndex(['2019-06-01 02:58:45-04:00', '2019-10-01 02:59:00-04:00',
#                '2019-10-01 02:59:15-04:00', '2020-07-18 05:16:30-04:00',
#                '2020-07-18 05:16:45-04:00'],
#               dtype='datetime64[ns, US/Eastern]', freq=None)

Se, tuttavia, l'ingresso è simile all'ora locale , ad esempio US / Eastern, puoi localizzare direttamente in quel fuso orario:

dti_USEastern = dti.tz_localize('US/Eastern')

# dti_USEastern
# DatetimeIndex(['2019-06-01 06:58:45-04:00', '2019-10-01 06:59:00-04:00',
#                '2019-10-01 06:59:15-04:00', '2020-07-18 09:16:30-04:00',
#                '2020-07-18 09:16:45-04:00'],
#               dtype='datetime64[ns, US/Eastern]', freq=None)