Вместо использования datetime
или строк для заполнения DatetimeIndex
, создайте pandas.Timestamp
версию pandas
datetime.datetime
.
Сначала создайте метку времени Posix, то есть секунды с начала эпохи:
week_number = 2024
t_gps = 138088.886582
leapsecond = 37
posix_ts = week_number * 7 * 24 * 60 * 60 + t_gps + leapsecond
Затем создайте Timestamp
:
pandas_ts = Timestamp.utcfromtimestamp(posix_ts)
>>> Timestamp('2008-10-17 14:22:05.886582')
На этом этапе Timestamp
является «наивным»: при сборке в формате UTC он не содержит информацию о часовом поясе., так:
pandas_ts = pandas_ts.tz_localize("UTC")
>>> Timestamp('2008-10-17 14:22:05.886582+0000', tz='UTC')
Наконец, вы можете преобразовать в ваш местный часовой пояс:
pandas_ts = pandas_ts.tz_convert("my_time_zone") # replace by correct tz
>>> Timestamp('2008-10-17 NN:22:05.886582+XXXX', tz='my_time_zone')
и построить необходимый DatetimeIndex
:
di = DatetimeIndex([pandas_ts])
print(di) # shows the time zone in the type (dtype='datetime64[ns, my_time_zone]')
long = -46.305043
eq_time = pvl.solarposition.equation_of_time_pvcdrom(295)
hour_angle = pvl.solarposition.hour_angle(di, long, eq_time)
print(hour_angle)
ДонНе смешивайте tz_localize
и tz_convert
и не забывайте всегда устанавливать часовой пояс.Таким образом, вы управляете созданием DatetimeIndex
, используя строку, на которую вы полагаетесь при автоматическом разборе pandas
, проблематично с часовым поясом.