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

时间:2012-04-03 07:52:19

标签: timezone abap

您是否有人建议如何将给定的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在Twitter上建议,还应该检查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.

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

1 个答案:

答案 0 :(得分: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
       ).