问题描述
我有来自字段(佛罗里达)的数据,这将其保存为本地时间。佛罗里达州有夏时制时间。因此,我想将其转换为EST区域。我该怎么做? 我的代码:
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'],freq=None)
我上面的代码实际上没有将本地时间转换为东部标准时间,它仅附加了与UCT的时差。这是不正确的。
解决方法
请注意,EST
不是时区,而是在一年中的特定时间偏离某个特定时区的UTC。我建议使用IANA time zone names来明确地域归属。旁注:佛罗里达州有两个时区;美国/东部和美国/中部。
此外,要将时间转换为某个时区的时间,您必须先本地化为UTC。您的代码可能类似于
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)
但是,如果输入类似于本地时间(例如美国/东部),则可以直接本地化到该时区:
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'],freq=None)