есть ли у кого-нибудь из вас предложения, как преобразовать заданную временную метку UTC в дату и время системного часового пояса?
Преобразование временной метки UTC в локальный часовой пояс пользователя очень просто, вы можете просто сделать:
CONVERT TIME STAMP lv_utc_timestamp TIME ZONE sy-zonlo
INTO DATE lv_local_date TIME lv_local_time.
Но как это сделать для системного времени? при вызове функционального модуля JOB_CLOSE. Единственное решение, которое я придумал до сих пор, выглядит так:
SELECT SINGLE * FROM TTZCU INTO ls_ttzcu.
CONVERT TIME STAMP lv_utc_timestamp TIME ZONE ls_ttzcu-tzonesys
INTO DATE lv_system_date TIME lv_system_time.
Это уже лучшее решение или системный часовой пояс можно получить другим способом? Всегда ли следует ожидать действительного часового пояса от записи в таблице TTZCU? Любые идеи?
ОБНОВЛЕНИЕ: @rmtiwari предложил в твиттере, что флаг FLAGACTIVE TTZCU также должен быть проверен, поэтому измененный оператор будет
SELECT SINGLE * FROM TTZCU INTO ls_ttzcu WHERE flagactive = abap_true.
CONVERT TIME STAMP lv_utc_timestamp TIME ZONE ls_ttzcu-tzonesys
INTO DATE lv_system_date TIME lv_system_time.
ОБНОВЛЕНИЕ2: Я нашел другой способ, который, вероятно, лучший :
cl_abap_tstmp=>systemtstmp_utc2syst(
EXPORTING utc_tstmp = lv_utc_timestamp
IMPORTING syst_date = lv_system_date " System Date
syst_time = lv_system_time " System Time
).