Как преобразовать метку времени UTC в системную дату и время в ABAP - PullRequest
5 голосов
/ 03 апреля 2012

У кого-нибудь из вас есть предложения, как преобразовать данную метку времени UTC в дату и время системного часового пояса?

Преобразовать метку времени UTC в местный часовой пояс пользователей легко, вы можете простоdo:

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
           ).

1 Ответ

8 голосов
/ 04 июля 2012

Наилучшим образом выглядит:

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
       ).
...