2012-04-03 219 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建议在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 
      ). 
+0

我喜欢你的最终解决方案。如果它解决了你的问题,你应该把它复制到答案中。几天后,您将能够将其标记为正确的答案。 – Esti 2012-04-04 00:04:17

回答

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 
     ). 
相关问题