Python Converte l'ora legale in ora della zona standard
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
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)