2012-04-03 2 views
5

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

Преобразования из 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? Есть идеи?

UPDATE: @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. 

UPDATE2: Я нашел еще один способ, который вероятно, лучше всего:

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

Мне нравится ваше окончательное решение. Если она решит вашу проблему, вы должны скопировать ее в ответ. Через пару дней вы сможете указать его как правильный ответ. – Esti

ответ

8

лучший способ кажется:

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