您是否有人建议如何将给定的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
).
答案 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
).