如何在ABAP中将UTC时间戳转换为系统日期和时间

ses*_*eso 5 timezone abap

你们有没有人建议如何将给定的UTC时间戳转换为系统时区的日期和时间?

从UTC时间戳转换为用户本地时区很简单,您可以这样做:

CONVERT TIME STAMP lv_utc_timestamp TIME ZONE sy-zonlo
          INTO DATE lv_local_date TIME lv_local_time.
Run Code Online (Sandbox Code Playgroud)

但是如何在系统时间内完成 - 在许多情况下需要系统时间,例如在调用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.
Run Code Online (Sandbox Code Playgroud)

这已经是最好的解决方案还是可以用另一种方式检索系统时区?表TTZCU中的条目是否总是有一个有效的时区?有任何想法吗?

更新: @rmtiwari在推特上建议,还应检查TTZCU的FLAGACTIVE标志,因此修改后的声明将是

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.
Run Code Online (Sandbox Code Playgroud)

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
           ).
Run Code Online (Sandbox Code Playgroud)

ses*_*eso 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
       ).
Run Code Online (Sandbox Code Playgroud)