Python Mengkonversi Daylight Saving time ke waktu Zona Standar
Saya memiliki data yang berasal dari lapangan (Florida), yang menyimpannya dalam waktu lokal. Florida memiliki waktu penghematan siang hari. Jadi, saya ingin mengubahnya menjadi zona EST. Bagaimana saya melakukannya? Kode saya:
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)
Kode saya di atas sebenarnya tidak mengubah waktu lokal ke waktu standar timur, itu hanya menambahkan perbedaan waktu dengan UCT. Ini tidak benar.
Jawaban
Perhatikan bahwa ESTini bukanlah zona waktu tetapi perbedaan dari UTC dari zona waktu tertentu pada waktu tertentu dalam setahun. Saya menyarankan untuk menggunakan nama zona waktu IANA sebagai gantinya untuk atribusi geografis yang tidak ambigu. Catatan tambahan: Florida memiliki dua zona waktu; AS / Timur dan AS / Tengah.
Selain itu, untuk mengubah waktu UTC menjadi waktu zona waktu, Anda harus melokalkannya ke UTC terlebih dahulu. Kode Anda mungkin terlihat seperti ini
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)
Namun, jika inputnya menyerupai waktu lokal , katakanlah AS / Eastern, Anda dapat langsung melokalkan ke zona waktu itu:
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)